aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-10-14 17:34:42 +0200
committerYang Tse <yangsita@gmail.com>2011-10-14 17:34:42 +0200
commit1bab38780b55cc4bd39267f54aacb49ddeb00eb2 (patch)
tree29e8cbda084d30a89f94521f8a59105617d34ed9 /lib/url.c
parentfd10c047df694e55abc6950391d6822cecc3000b (diff)
url.c: fix endless loop upon transport connection timeout
Jerry Wu detected and provided detailed info about this issue.
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/url.c b/lib/url.c
index e9451b67f..8ccef459a 100644
--- 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)