url.c: fix endless loop upon transport connection timeout
authorYang Tse <yangsita@gmail.com>
Fri, 14 Oct 2011 15:34:42 +0000 (17:34 +0200)
committerYang Tse <yangsita@gmail.com>
Fri, 14 Oct 2011 15:34:42 +0000 (17:34 +0200)
Jerry Wu detected and provided detailed info about this issue.

lib/url.c

index e9451b6..8ccef45 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -5073,7 +5073,7 @@ static CURLcode create_conn(struct SessionHandle *data,
 CURLcode Curl_setup_conn(struct connectdata *conn,
                          bool *protocol_done)
 {
-  CURLcode result=CURLE_OK;
+  CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
 
   Curl_pgrsTime(data, TIMER_NAMELOOKUP);
@@ -5119,6 +5119,12 @@ CURLcode Curl_setup_conn(struct connectdata *conn,
 
       result = ConnectPlease(data, conn, &connected);
 
+      if(result && !conn->ip_addr) {
+        /* transport connection failure not related with authentication */
+        conn->bits.tcpconnect[FIRSTSOCKET] = FALSE;
+        return result;
+      }
+
       if(connected) {
         result = Curl_protocol_connect(conn, protocol_done);
         if(CURLE_OK == result)