diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2014-06-16 17:01:40 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2014-06-16 17:01:40 +0400 |
commit | d510072c834371e39bcf61e0d6e9128562eb8a34 (patch) | |
tree | 5f865c9981e6c6c06b8999e6405a09c143f4bad3 /winsup | |
parent | 6681d11fd3464c7ba9a74e7f594dcbd3eb96688a (diff) |
* fhandler_socket.cc (fhandler_socket::evaluate_events): Call
WSASetLastError after setsockopt. Explain why.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_socket.cc | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 0955ce1a0..de2ed2e5a 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2014-06-16 Corinna Vinschen <corinna@vinschen.de> + + * fhandler_socket.cc (fhandler_socket::evaluate_events): Call + WSASetLastError after setsockopt. Explain why. + 2014-06-16 Denis Excoffier <cygwin@Denis-Excoffier.org> * grp.cc (getgrouplist): Fix setting ngroups to make sure to return 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 |