diff options
author | Thomas Pfaff <tpfaff@gmx.net> | 2003-06-07 11:05:35 +0000 |
---|---|---|
committer | Thomas Pfaff <tpfaff@gmx.net> | 2003-06-07 11:05:35 +0000 |
commit | f496071c4072d8c3db27ce51a0a3e13729b7be4c (patch) | |
tree | 30500efeff3f572aa791938475b3c3dac8c7dd2c | |
parent | 729d1ff9d89641b443bca6fcd5d4a9e3d9f3896a (diff) | |
download | newlib-f496071c4072d8c3db27ce51a0a3e13729b7be4c.zip newlib-f496071c4072d8c3db27ce51a0a3e13729b7be4c.tar.gz newlib-f496071c4072d8c3db27ce51a0a3e13729b7be4c.tar.bz2 |
* fhandler_socket.cc (fhandler_socket::connect): Change error
handling for nonblocking connects to return EALREADY when
connect is called more than once for the same socket.
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_socket.cc | 14 |
2 files changed, 14 insertions, 6 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1588f36..94ec378 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2003-06-07 Thomas Pfaff <tpfaff@gmx.net> + + * fhandler_socket.cc (fhandler_socket::connect): Change error + handling for nonblocking connects to return EALREADY when + connect is called more than once for the same socket. + 2003-06-06 Corinna Vinschen <corinna@vinschen.de> * cygwin.din: Add vsyslog. diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 894e980..3dd8d67 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -502,6 +502,7 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen) BOOL in_progress = FALSE; sockaddr_in sin; int secret [4]; + DWORD err; if (!get_inet_addr (name, namelen, &sin, &namelen, secret)) return -1; @@ -514,12 +515,12 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen) when called on a non-blocking socket. */ if (is_nonblocking () || is_connect_pending ()) { - DWORD err = WSAGetLastError (); + err = WSAGetLastError (); if (err == WSAEWOULDBLOCK || err == WSAEALREADY) - { - WSASetLastError (WSAEINPROGRESS); - in_progress = TRUE; - } + in_progress = TRUE; + + if (err == WSAEWOULDBLOCK) + WSASetLastError (WSAEINPROGRESS); else if (err == WSAEINVAL) WSASetLastError (WSAEISCONN); } @@ -556,7 +557,8 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen) } } - if (WSAGetLastError () == WSAEINPROGRESS) + err = WSAGetLastError (); + if (err == WSAEINPROGRESS || err == WSAEALREADY) set_connect_state (CONNECT_PENDING); else set_connect_state (CONNECTED); |