* enable detection of EWOULDBLOCK errors on Windows
#if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV)
#ifdef AFS_NT40_ENV
#include <winsock2.h>
+#ifndef EWOULDBLOCK
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#endif
#else
#include <sys/socket.h>
#include <netinet/in.h>
if ((nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */
if (nbytes > 0)
rxi_MorePackets(rx_initSendWindow);
-#ifndef AFS_NT40_ENV
else if (nbytes < 0 && errno == EWOULDBLOCK) {
MUTEX_ENTER(&rx_stats_mutex);
rx_stats.noPacketOnRead++;
MUTEX_EXIT(&rx_stats_mutex);
}
-#endif
else {
MUTEX_ENTER(&rx_stats_mutex);
rx_stats.bogusPacketOnRead++;
/* Accounts for any we didn't copy in to iovecs. */
code -= size;
} else {
+#ifdef AFS_NT40_ENV
+ if (code == SOCKET_ERROR)
+ code = WSAGetLastError();
+ if (code == WSAEWOULDBLOCK)
+ errno = WSAEWOULDBLOCK;
+ else
+ errno = EIO;
+#endif /* AFS_NT40_ENV */
code = -1;
}
switch (code) {
case WSAEINPROGRESS:
case WSAENETRESET:
- case WSAEWOULDBLOCK:
case WSAENOBUFS:
errno = 0;
break;
+ case WSAEWOULDBLOCK:
+ errno = WSAEWOULDBLOCK;
+ break;
default:
errno = EIO;
break;
return code;
}
-
-
-
-
#endif /* AFS_NT40_ENV || AFS_DJGPP_ENV */