summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/net.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/net.cc')
-rw-r--r--winsup/cygwin/net.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index c63fa3c33..5fbc92e8d 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -90,7 +90,13 @@ wsock_event::wait (int socket, LPDWORD flags)
ret = (int) len;
break;
case WSA_WAIT_EVENT_0 + 1:
- WSASetLastError (WSAEINTR);
+ if (!CancelIo ((HANDLE)socket))
+ {
+ debug_printf ("CancelIo() %E, fallback to blocking io");
+ WSAGetOverlappedResult(socket, &ovr, &len, TRUE, flags);
+ }
+ else
+ WSASetLastError (WSAEINTR);
break;
case WSA_WAIT_FAILED:
break;