From: Björn Stenberg Date: Sat, 28 Dec 2013 12:42:57 +0000 (+0100) Subject: connect: Try all addresses in first connection attempt X-Git-Tag: curl-7_35_0~168 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4e1ece2e44f432c2614f2090155c0aaf2226ea80;p=thirdparty%2Fcurl.git connect: Try all addresses in first connection attempt Fixes a bug when all addresses in the first family fail immediately, due to "Network unreachable" for example, curl would hang and never try the next address family. Iterate through all address families when to trying establish the first connection attempt. Bug: http://curl.haxx.se/bug/view.cgi?id=1315 Reported-by: Michal Górny and Anthony G. Basile --- diff --git a/lib/connect.c b/lib/connect.c index 4b6ee00a2e..588ac28b55 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -1104,12 +1104,12 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ conn->tempaddr[0]->ai_next == NULL ? timeout_ms : timeout_ms / 2; /* start connecting to first IP */ - res = singleipconnect(conn, conn->tempaddr[0], &(conn->tempsock[0])); - while(res != CURLE_OK && - conn->tempaddr[0] && - conn->tempaddr[0]->ai_next && - conn->tempsock[0] == CURL_SOCKET_BAD) - res = trynextip(conn, FIRSTSOCKET, 0); + while(conn->tempaddr[0]) { + res = singleipconnect(conn, conn->tempaddr[0], &(conn->tempsock[0])); + if(res == CURLE_OK) + break; + conn->tempaddr[0] = conn->tempaddr[0]->ai_next; + } if(conn->tempsock[0] == CURL_SOCKET_BAD) return res;