--- transport.c 2007-09-24 17:10:21.000000000 +0200
+++ transport.c.patched 2007-09-24 17:11:34.000000000 +0200
@@ -331,6 +331,26 @@
                 /* check if this is due to EAGAIN and return
                    the special return code if so, error out
                    normally otherwise */
+#ifdef WIN32
+              switch (WSAGetLastError()) {
+              case WSAEWOULDBLOCK:
+                  errno = EAGAIN;
+                  break;
+
+              case WSAENOTSOCK:
+                  errno = EBADF;
+                  break;
+
+              case WSAENOTCONN:
+              case WSAECONNABORTED:
+                  errno = WSAENOTCONN;
+                  break;
+
+              case WSAEINTR:
+                  errno = EINTR;
+                  break;
+              }
+#endif /* WIN32 */
                 if ((nread < 0) && (errno == EAGAIN)) {
                     return PACKET_EAGAIN;
                 }
