Detecting when a client is not reading data from a socket (or pipe) as fast as the server is writing

It seems puts will block or push data in the background. If it is interrupted with alarm it happily continues. Here is a small patch to allow TclX alarm to interrupt blocking output [puts]. Is this a good idea?

Index: generic/tclIO.c
===================================================================
--- generic/tclIO.c
+++ generic/tclIO.c
@@ -2416,16 +2416,17 @@
          * write any more output at this time.
          */
 
         if (written < 0) {
             /*
-             * If the last attempt to write was interrupted, simply retry.
+             * If the last attempt to write was interrupted, Check for async events or simply retry.
              */
-
             if (errorCode == EINTR) {
-                errorCode = 0;
-                continue;
+                if (!Tcl_AsyncReady() || Tcl_AsyncInvoke(interp, TCL_OK) == TCL_OK) {
+                    errorCode = 0;
+                    continue;
+                }
             }
 
             /*
              * If the channel is non-blocking and we would have blocked, start
              * a background flushing handler and break out of the loop