* fhandler_socket.cc (fhandler_socket::close): Respond to signals while
looping, waiting for socket to close. Superstitiously clear last error when WSAEWOULDBLOCK.
This commit is contained in:
parent
241a7c5a8c
commit
eeac69d835
@ -1,3 +1,9 @@
|
|||||||
|
2002-03-05 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* fhandler_socket.cc (fhandler_socket::close): Respond to signals while
|
||||||
|
looping, waiting for socket to close. Superstitiously clear last error
|
||||||
|
when WSAEWOULDBLOCK.
|
||||||
|
|
||||||
2002-03-05 Robert Collins <rbtcollins@hotmail.com>
|
2002-03-05 Robert Collins <rbtcollins@hotmail.com>
|
||||||
|
|
||||||
* cygserver_transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
|
* cygserver_transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
|
||||||
|
@ -352,13 +352,21 @@ fhandler_socket::close ()
|
|||||||
setsockopt (get_socket (), SOL_SOCKET, SO_LINGER,
|
setsockopt (get_socket (), SOL_SOCKET, SO_LINGER,
|
||||||
(const char *)&linger, sizeof linger);
|
(const char *)&linger, sizeof linger);
|
||||||
|
|
||||||
while ((res = closesocket (get_socket ()))
|
while ((res = closesocket (get_socket ())) != 0)
|
||||||
&& WSAGetLastError () == WSAEWOULDBLOCK)
|
|
||||||
continue;
|
|
||||||
if (res)
|
|
||||||
{
|
{
|
||||||
set_winsock_errno ();
|
if (WSAGetLastError () != WSAEWOULDBLOCK)
|
||||||
res = -1;
|
{
|
||||||
|
set_winsock_errno ();
|
||||||
|
res = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (WaitForSingleObject (signal_arrived, 10) == WAIT_OBJECT_0)
|
||||||
|
{
|
||||||
|
set_errno (EINTR);
|
||||||
|
res = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
WSASetLastError (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
close_secret_event ();
|
close_secret_event ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user