* fhandler_socket.cc (fhandler_socket::prepare): Fix debug output.
(fhandler_socket::release): Add debug output for WSAEventSelect failure. (fhandler_socket::ioctl): Always cancel WSAEventSelect before switching to blocking mode. Only set nonblocking flag if ioctlsocket call succeeded. Only print new socket state if ioctlsocket call succeeded.
This commit is contained in:
parent
3c09c0fb25
commit
1ef48340d5
winsup/cygwin
|
@ -1,3 +1,11 @@
|
||||||
|
2006-01-20 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler_socket.cc (fhandler_socket::prepare): Fix debug output.
|
||||||
|
(fhandler_socket::release): Add debug output for WSAEventSelect failure.
|
||||||
|
(fhandler_socket::ioctl): Always cancel WSAEventSelect before switching
|
||||||
|
to blocking mode. Only set nonblocking flag if ioctlsocket call
|
||||||
|
succeeded. Only print new socket state if ioctlsocket call succeeded.
|
||||||
|
|
||||||
2006-01-19 Christopher Faylor <cgf@timesys.com>
|
2006-01-19 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
* fhandler_disk_file.cc (fhandler_disk_file::opendir): Check posix path
|
* fhandler_disk_file.cc (fhandler_disk_file::opendir): Check posix path
|
||||||
|
|
|
@ -896,7 +896,7 @@ fhandler_socket::prepare (HANDLE &event, long event_mask)
|
||||||
}
|
}
|
||||||
if (WSAEventSelect (get_socket (), event, event_mask) == SOCKET_ERROR)
|
if (WSAEventSelect (get_socket (), event, event_mask) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
debug_printf ("WSAEventSelect, %E");
|
debug_printf ("WSAEventSelect(evt), %d", WSAGetLastError ());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -994,7 +994,8 @@ fhandler_socket::release (HANDLE event)
|
||||||
{
|
{
|
||||||
int last_err = WSAGetLastError ();
|
int last_err = WSAGetLastError ();
|
||||||
/* KB 168349: NT4 fails if the event parameter is not NULL. */
|
/* KB 168349: NT4 fails if the event parameter is not NULL. */
|
||||||
WSAEventSelect (get_socket (), NULL, 0);
|
if (WSAEventSelect (get_socket (), NULL, 0) == SOCKET_ERROR)
|
||||||
|
debug_printf ("WSAEventSelect(NULL), %d", WSAGetLastError ());
|
||||||
WSACloseEvent (event);
|
WSACloseEvent (event);
|
||||||
unsigned long non_block = 0;
|
unsigned long non_block = 0;
|
||||||
if (ioctlsocket (get_socket (), FIONBIO, &non_block))
|
if (ioctlsocket (get_socket (), FIONBIO, &non_block))
|
||||||
|
@ -1495,20 +1496,27 @@ fhandler_socket::ioctl (unsigned int cmd, void *p)
|
||||||
/* We must cancel WSAAsyncSelect (if any) before setting socket to
|
/* We must cancel WSAAsyncSelect (if any) before setting socket to
|
||||||
* blocking mode
|
* blocking mode
|
||||||
*/
|
*/
|
||||||
if (cmd == FIONBIO && async_io () && *(int *) p == 0)
|
if (cmd == FIONBIO && *(int *) p == 0)
|
||||||
WSAAsyncSelect (get_socket (), winmsg, 0, 0);
|
{
|
||||||
|
if (async_io ())
|
||||||
|
WSAAsyncSelect (get_socket (), winmsg, 0, 0);
|
||||||
|
if (WSAEventSelect (get_socket (), NULL, 0) == SOCKET_ERROR)
|
||||||
|
debug_printf ("WSAEventSelect(NULL), %d", WSAGetLastError ());
|
||||||
|
}
|
||||||
res = ioctlsocket (get_socket (), cmd, (unsigned long *) p);
|
res = ioctlsocket (get_socket (), cmd, (unsigned long *) p);
|
||||||
if (res == SOCKET_ERROR)
|
if (res == SOCKET_ERROR)
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
if (cmd == FIONBIO)
|
if (cmd == FIONBIO)
|
||||||
{
|
{
|
||||||
syscall_printf ("socket is now %sblocking",
|
if (!res)
|
||||||
*(int *) p ? "non" : "");
|
{
|
||||||
|
syscall_printf ("socket is now %sblocking",
|
||||||
|
*(int *) p ? "non" : "");
|
||||||
|
set_nonblocking (*(int *) p);
|
||||||
|
}
|
||||||
/* Start AsyncSelect if async socket unblocked */
|
/* Start AsyncSelect if async socket unblocked */
|
||||||
if (*(int *) p && async_io ())
|
if (*(int *) p && async_io ())
|
||||||
WSAAsyncSelect (get_socket (), winmsg, WM_ASYNCIO, ASYNC_MASK);
|
WSAAsyncSelect (get_socket (), winmsg, WM_ASYNCIO, ASYNC_MASK);
|
||||||
|
|
||||||
set_nonblocking (*(int *) p);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue