Aha, _that's_ why I've been periodically getting blocking-write
[u/mdw/putty] / unix / uxnet.c
index bfc4a8e..bd40937 100644 (file)
@@ -1077,6 +1077,7 @@ static int net_select_result(int fd, int event)
 #endif
            socklen_t addrlen = sizeof(ss);
            int t;  /* socket of connection */
+            int fl;
 
            memset(&ss, 0, addrlen);
            t = accept(s->s, (struct sockaddr *)&ss, &addrlen);
@@ -1084,6 +1085,10 @@ static int net_select_result(int fd, int event)
                break;
            }
 
+            fl = fcntl(t, F_GETFL);
+            if (fl != -1)
+                fcntl(t, F_SETFL, fl | O_NONBLOCK);
+
            if (s->localhost_only &&
                !sockaddr_is_loopback((struct sockaddr *)&ss)) {
                close(t);              /* someone let nonlocal through?! */