Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-05-18 12:33:33 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-05-18 12:33:33 +0400
commit0260054a8cf0ca8642994847e4c64156f0adc983 (patch)
tree80af6c9d94cc091944c6d8b305f328ada5572964 /winsup/cygwin/net.cc
parentf6b52c79f54a91c97fdb0591faf4fdfacffb5ff6 (diff)
* net.cc (wsock_event::wait): Explicitely cancel IO when a signal
arrived to avoid data loss. Fallback to blocking IO when canceling fails.
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;