* net.cc (wsock_event::wait): Explicitely cancel IO when a signal

arrived to avoid data loss. Fallback to blocking IO when canceling
        fails.
This commit is contained in:
Corinna Vinschen
2001-05-18 08:33:33 +00:00
parent f6b52c79f5
commit 0260054a8c
2 changed files with 13 additions and 1 deletions

View File

@@ -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;