Index: src/session.c
===================================================================
RCS file: /cvsroot/libssh2/libssh2/src/session.c,v
retrieving revision 1.53
diff -u -r1.53 session.c
--- src/session.c	2 Jan 2008 14:48:48 -0000	1.53
+++ src/session.c	12 Sep 2008 19:11:55 -0000
@@ -110,28 +110,29 @@
         ret =
             recv(session->socket_fd, &c, 1,
                  LIBSSH2_SOCKET_RECV_FLAGS(session));
-
-        if (ret < 0) {
 #ifdef WIN32
-            switch (WSAGetLastError()) {
+        {
+            int sockerrno = WSAGetLastError();
+            switch (sockerrno) {
             case WSAEWOULDBLOCK:
                 errno = EAGAIN;
                 break;
-
             case WSAENOTSOCK:
                 errno = EBADF;
                 break;
-
             case WSAENOTCONN:
             case WSAECONNABORTED:
                 errno = WSAENOTCONN;
                 break;
-
             case WSAEINTR:
                 errno = EINTR;
                 break;
+            default:
+                errno = sockerrno;
             }
+        }
 #endif /* WIN32 */
+        if (ret < 0) {
             if (errno == EAGAIN) {
                 session->banner_TxRx_total_send = banner_len;
                 return PACKET_EAGAIN;
Index: src/transport.c
===================================================================
RCS file: /cvsroot/libssh2/libssh2/src/transport.c,v
retrieving revision 1.13
diff -u -r1.13 transport.c
--- src/transport.c	8 Nov 2007 13:51:23 -0000	1.13
+++ src/transport.c	12 Sep 2008 19:11:56 -0000
@@ -327,29 +327,31 @@
                 recv(session->socket_fd, &p->buf[remainbuf],
                      PACKETBUFSIZE - remainbuf,
                      LIBSSH2_SOCKET_RECV_FLAGS(session));
-            if (nread <= 0) {
-                /* check if this is due to EAGAIN and return the special
-                   return code if so, error out normally otherwise */
 #ifdef WIN32
-                switch (WSAGetLastError()) {
+            {
+                int sockerrno = WSAGetLastError();
+                switch (sockerrno) {
                 case WSAEWOULDBLOCK:
                     errno = EAGAIN;
                     break;
-
                 case WSAENOTSOCK:
                     errno = EBADF;
                     break;
-
                 case WSAENOTCONN:
                 case WSAECONNABORTED:
                     errno = WSAENOTCONN;
                     break;
-
                 case WSAEINTR:
                     errno = EINTR;
                     break;
+                default:
+                    errno = sockerrno;
                 }
+            }
 #endif /* WIN32 */
+            if (nread <= 0) {
+                /* check if this is due to EAGAIN and return the special
+                   return code if so, error out normally otherwise */
                 if ((nread < 0) && (errno == EAGAIN)) {
                     return PACKET_EAGAIN;
                 }
