diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c index e0abe847474ec593c9b6d740fb68d23a54c04b25..6945e7daf46c4d0b71abf1f80302a0d41518b366 100644 --- a/src/xpdev/sockwrap.c +++ b/src/xpdev/sockwrap.c @@ -362,6 +362,12 @@ BOOL socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout) if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) return FALSE; } + + if (j == -1) { + if (errno == EINTR || errno == ENOMEM) + return TRUE; + } + return FALSE; #endif } @@ -489,10 +495,15 @@ BOOL socket_recvdone(SOCKET sock, int timeout) pfd.fd = sock; pfd.events = POLLIN; - if (poll(&pfd, 1, timeout) == 1) { - if (pfd.revents & POLLIN) - return FALSE; - return TRUE; + switch (poll(&pfd, 1, timeout)) { + case 1: + if (pfd.revents & POLLIN) + return FALSE; + return TRUE; + case -1: + if (errno == EINTR || errno == ENOMEM) + return FALSE; + return TRUE; } return FALSE; #endif