David Brinegar's workaround for an error reporting problem in some
[u/mdw/putty] / winnet.c
index 01b4f1b..131f00a 100644 (file)
--- a/winnet.c
+++ b/winnet.c
@@ -504,8 +504,15 @@ void try_send(Actual_Socket s) {
         noise_ultralight(nsent);
        if (nsent <= 0) {
            err = (nsent < 0 ? WSAGetLastError() : 0);
-           if (err == WSAEWOULDBLOCK) {
-               /* Perfectly normal: we've sent all we can for the moment. */
+           if ((err==0 && nsent < 0) || err == WSAEWOULDBLOCK) {
+               /*
+                * Perfectly normal: we've sent all we can for the moment.
+                * 
+                * (Apparently some WinSocks can return <0 but
+                * leave no error indication - WSAGetLastError() is
+                * called but returns zero - so we check that case
+                * and treat it just like WSAEWOULDBLOCK.)
+                */
                s->writable = FALSE;
                 return;
            } else if (nsent == 0 ||