diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2014-06-16 13:01:40 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2014-06-16 13:01:40 +0000 |
commit | d510072c834371e39bcf61e0d6e9128562eb8a34 (patch) | |
tree | 5f865c9981e6c6c06b8999e6405a09c143f4bad3 /winsup/cygwin/fhandler_socket.cc | |
parent | 6681d11fd3464c7ba9a74e7f594dcbd3eb96688a (diff) | |
download | cygnal-d510072c834371e39bcf61e0d6e9128562eb8a34.tar.gz cygnal-d510072c834371e39bcf61e0d6e9128562eb8a34.tar.bz2 cygnal-d510072c834371e39bcf61e0d6e9128562eb8a34.zip |
* fhandler_socket.cc (fhandler_socket::evaluate_events): Call
WSASetLastError after setsockopt. Explain why.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r-- | winsup/cygwin/fhandler_socket.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index d4602be8a..2c3c75c91 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -633,7 +633,6 @@ fhandler_socket::evaluate_events (const long event_mask, long &events, int wsa_err = 0; if ((wsa_err = wsock_events->connect_errorcode) != 0) { - WSASetLastError (wsa_err); /* CV 2014-04-23: This is really weird. If you call connect asynchronously on a socket and then select, an error like "Connection refused" is set in the event and in the SO_ERROR @@ -642,9 +641,14 @@ fhandler_socket::evaluate_events (const long event_mask, long &events, option, even if the dup'ed socket handle refers to the same socket. We're trying to workaround this problem here by taking the connect errorcode from the event and write it back - into the SO_ERROR socket option. */ + into the SO_ERROR socket option. + + CV 2014-06-16: Call WSASetLastError *after* setsockopt since, + apparently, setsockopt sets the last WSA error code to 0 on + success. */ setsockopt (get_socket (), SOL_SOCKET, SO_ERROR, (const char *) &wsa_err, sizeof wsa_err); + WSASetLastError (wsa_err); ret = SOCKET_ERROR; } else |