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