]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Aha, _that's_ why I've been periodically getting blocking-write
authorSimon Tatham <anakin@pobox.com>
Thu, 21 Feb 2008 09:18:24 +0000 (09:18 +0000)
committerSimon Tatham <anakin@pobox.com>
Thu, 21 Feb 2008 09:18:24 +0000 (09:18 +0000)
problems using Unix PuTTY port forwarding. Sockets we create by
connect() are immediately set into nonblocking mode by fcntl, but
sockets we create by accept() were not. This trivial fix should help.

[originally from svn r7864]

unix/uxnet.c

index bfc4a8edba4df67efa124559a9fcd75fb335ed31..bd40937aeadd3ebc77ef24989e111b9d82870ec5 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?! */