From 4e1ece2e44f432c2614f2090155c0aaf2226ea80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Stenberg?= <bjorn@haxx.se> Date: Sat, 28 Dec 2013 13:42:57 +0100 Subject: [PATCH] connect: Try all addresses in first connection attempt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- lib/connect.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/connect.c b/lib/connect.c index 4b6ee00..588ac28 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; -- 1.8.5.2