singleipconnect: don't clobber errno
authorDaniel Stenberg <daniel@haxx.se>
Sat, 15 Oct 2011 21:44:28 +0000 (23:44 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 15 Oct 2011 21:44:28 +0000 (23:44 +0200)
Save the errno value immediately after a connect() failure so that it
won't get reset to something else before we read it.

Bug: http://curl.haxx.se/mail/lib-2011-10/0066.html
Reported by: Frank Van Uffelen and Fabian Hiernaux

lib/connect.c

index 7f0171f..309ba35 100644 (file)
@@ -836,7 +836,7 @@ singleipconnect(struct connectdata *conn,
 {
   struct Curl_sockaddr_ex addr;
   int rc;
-  int error;
+  int error = 0;
   bool isconnected = FALSE;
   struct SessionHandle *data = conn->data;
   curl_socket_t sockfd;
@@ -946,6 +946,8 @@ singleipconnect(struct connectdata *conn,
   /* Connect TCP sockets, bind UDP */
   if(!isconnected && (conn->socktype == SOCK_STREAM)) {
     rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
+    if(-1 == rc)
+      error = SOCKERRNO;
     conn->connecttime = Curl_tvnow();
     if(conn->num_addr > 1)
       Curl_expire(data, conn->timeoutms_per_addr);
@@ -954,8 +956,6 @@ singleipconnect(struct connectdata *conn,
     rc = 0;
 
   if(-1 == rc) {
-    error = SOCKERRNO;
-
     switch (error) {
     case EINPROGRESS:
     case EWOULDBLOCK: