]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler_socket.cc (fhandler_socket::connect): Change error
authorThomas Pfaff <tpfaff@gmx.net>
Sat, 7 Jun 2003 11:05:35 +0000 (11:05 +0000)
committerThomas Pfaff <tpfaff@gmx.net>
Sat, 7 Jun 2003 11:05:35 +0000 (11:05 +0000)
handling for nonblocking connects to return EALREADY when
connect is called more than once for the same socket.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_socket.cc

index 1588f36285de3ddb7374623f74533ba051f5c6d6..94ec37845a2c1ee34e4e23a94ef02ff938f71c04 100644 (file)
@@ -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.
index 894e980e64060f3a75f0e24a82a5cd5299d1a5c5..3dd8d6762e3f0a061623bb9d1380c9aa05eafc68 100644 (file)
@@ -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);
This page took 0.036101 seconds and 5 git commands to generate.