From f08edd0fae0f00475c915113893bc355dbe1b9f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Stenberg?= <bjorn@haxx.se>
Date: Tue, 12 Nov 2013 21:09:03 +0100
Subject: [PATCH] connect: Return the socket descriptor even on fail

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 | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/lib/connect.c b/lib/connect.c
index 67f7334..e4d4fee 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -1027,6 +1027,8 @@ singleipconnect(struct connectdata *conn,
   conn->bits.ipv6 = (addr.family == AF_INET6)?TRUE:FALSE;
 #endif
 
+  *sockp = sockfd;
+
   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;
 }
-- 
1.8.4.rc3


