Cygwin: sockets: Rearrange check for connect failure

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2020-07-20 09:49:07 +02:00 committed by Ken Brown
parent 2d44ff3b84
commit f9aba438ad
1 changed files with 7 additions and 9 deletions

View File

@ -352,9 +352,13 @@ fhandler_socket_wsock::evaluate_events (const long event_mask, long &events,
WSASetLastError (wsa_err); WSASetLastError (wsa_err);
ret = SOCKET_ERROR; ret = SOCKET_ERROR;
} }
else /* Since FD_CONNECT is only given once, we have to keep FD_CONNECT
wsock_events->events |= FD_WRITE; for connection failed sockets to have consistent behaviour in
wsock_events->events &= ~FD_CONNECT; programs calling poll/select multiple times. Example test to
non-listening port: curl -v 127.0.0.1:47 */
if (connect_state () != connect_failed)
wsock_events->events &= ~FD_CONNECT;
wsock_events->events |= FD_WRITE;
wsock_events->connect_errorcode = 0; wsock_events->connect_errorcode = 0;
} }
/* This test makes accept/connect behave as on Linux when accept/connect /* This test makes accept/connect behave as on Linux when accept/connect
@ -376,12 +380,6 @@ fhandler_socket_wsock::evaluate_events (const long event_mask, long &events,
if (erase) if (erase)
wsock_events->events &= ~(events & ~(FD_WRITE | FD_CLOSE)); wsock_events->events &= ~(events & ~(FD_WRITE | FD_CLOSE));
} }
/* Since FD_CONNECT is only given once, we manually need to set
FD_WRITE for connection failed sockets to have consistent
behaviour in programs calling poll/select multiple times.
Example test to non-listening port: curl -v 127.0.0.1:47 */
if ((connect_state () == connect_failed) && (event_mask & FD_WRITE))
wsock_events->events |= FD_WRITE;
UNLOCK_EVENTS; UNLOCK_EVENTS;
return ret; return ret;