connect: Return the socket descriptor even on fail
authorBjörn Stenberg <bjorn@haxx.se>
Tue, 12 Nov 2013 20:09:03 +0000 (21:09 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Thu, 14 Nov 2013 19:56:59 +0000 (19:56 +0000)
singleipconnect() did not return the open socket descriptor on some
errors, thereby sometimes causing a socket leak. This patch ensures
the socket is always returned.

lib/connect.c

index 67f7334..91aac8b 100644 (file)
@@ -1027,6 +1027,8 @@ singleipconnect(struct connectdata *conn,
   conn->bits.ipv6 = (addr.family == AF_INET6)?TRUE:FALSE;
 #endif
 
+  *sockp = sockfd;\r
+\r
   if(-1 == rc) {
     switch (error) {
     case EINPROGRESS:
@@ -1040,7 +1042,6 @@ singleipconnect(struct connectdata *conn,
     case EAGAIN:
 #endif
 #endif
-      *sockp = sockfd;
       return CURLE_OK;
 
     default:
@@ -1053,8 +1054,6 @@ singleipconnect(struct connectdata *conn,
       return CURLE_COULDNT_CONNECT;
     }
   }
-  else
-    *sockp = sockfd;
 
   return CURLE_OK;
 }