diff options
author | Yang Tse <yangsita@gmail.com> | 2011-10-14 17:34:42 +0200 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-10-14 17:34:42 +0200 |
commit | 1bab38780b55cc4bd39267f54aacb49ddeb00eb2 (patch) | |
tree | 29e8cbda084d30a89f94521f8a59105617d34ed9 | |
parent | fd10c047df694e55abc6950391d6822cecc3000b (diff) |
url.c: fix endless loop upon transport connection timeout
Jerry Wu detected and provided detailed info about this issue.
-rw-r--r-- | lib/url.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -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) |