mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-15 05:46:15 +01:00
Windows: fix FD_READ condition flag still set on recoverable UDP socket errors.
Contrary to what the WSARecvFrom seem to imply, a UDP socket is perfectly recoverable and usable after a WSAECONNRESET error (and, I assume, WSAENETRESET). However GSocket condition has the FD_READ bit set after a UDP socket fails with WSAECONNRESET, even if no data is available on the socket anymore; this causes select calls to report the socket as readable when, in fact, it's not. The change resets FD_READ flag on a socket upon the above error conditions; there's no 'if' to filter between datagram and stream sockets as the change should be harmless in the case of stream sockets which are, however, very unlikely to be usable after a WSAECONNRESET.
This commit is contained in:
parent
b20a8b5a5a
commit
6900d53ed8
@ -5475,10 +5475,10 @@ g_socket_receive_message_with_timeout (GSocket *socket,
|
|||||||
if (errsv == WSAEINTR)
|
if (errsv == WSAEINTR)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (errsv == WSAEWOULDBLOCK)
|
|
||||||
{
|
|
||||||
win32_unset_event_mask (socket, FD_READ);
|
win32_unset_event_mask (socket, FD_READ);
|
||||||
|
|
||||||
|
if (errsv == WSAEWOULDBLOCK)
|
||||||
|
{
|
||||||
if (timeout_us != 0)
|
if (timeout_us != 0)
|
||||||
{
|
{
|
||||||
if (!block_on_timeout (socket, G_IO_IN, timeout_us,
|
if (!block_on_timeout (socket, G_IO_IN, timeout_us,
|
||||||
|
Loading…
Reference in New Issue
Block a user