diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-02-18 16:33:36 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-02-19 22:50:02 +0100 |
commit | b08898fb299ad173167631bd4aa9c95458d76f0e (patch) | |
tree | 5b9bade3cc8ef22fa7d5f65ddd5debf9807b9fb0 /lib | |
parent | e49e5eaa1069a4dfb0ece4a6d833bf51341ef73a (diff) | |
download | curl-b08898fb299ad173167631bd4aa9c95458d76f0e.tar.gz |
connection: never reuse CONNECT_ONLY conections
and make CONNECT_ONLY conections never reuse any existing ones either.
Reported-by: Pavel Löbl
Bug: https://curl.haxx.se/mail/lib-2019-02/0064.html
Closes #3586
Diffstat (limited to 'lib')
-rw-r--r-- | lib/url.c | 11 | ||||
-rw-r--r-- | lib/urldata.h | 1 |
2 files changed, 9 insertions, 3 deletions
@@ -1133,6 +1133,10 @@ ConnectionExists(struct Curl_easy *data, check = curr->ptr; curr = curr->next; + if(check->bits.connect_only) + /* connect-only connections will not be reused */ + continue; + if(extract_if_dead(check, data)) { /* disconnect it */ (void)Curl_disconnect(data, check, /* dead_connection */TRUE); @@ -1893,8 +1897,8 @@ static struct connectdata *allocate_conn(struct Curl_easy *data) data->set.proxy_ssl.primary.verifystatus; conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer; conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost; - conn->ip_version = data->set.ipver; + conn->bits.connect_only = data->set.connect_only; #if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ defined(NTLM_WB_ENABLED) @@ -3871,8 +3875,9 @@ static CURLcode create_conn(struct Curl_easy *data, /* reuse_fresh is TRUE if we are told to use a new connection by force, but we only acknowledge this option if this is not a re-used connection already (which happens due to follow-location or during a HTTP - authentication phase). */ - if(data->set.reuse_fresh && !data->state.this_is_a_follow) + authentication phase). CONNECT_ONLY transfers also refuse reuse. */ + if((data->set.reuse_fresh && !data->state.this_is_a_follow) || + data->set.connect_only) reuse = FALSE; else reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse, &waitpipe); diff --git a/lib/urldata.h b/lib/urldata.h index b194fde23..cdedb8fb1 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -452,6 +452,7 @@ struct ConnectBits { bool proxy_ssl_connected[2]; /* TRUE when SSL initialization for HTTPS proxy is complete */ bool socksproxy_connecting; /* connecting through a socks proxy */ + bool connect_only; }; struct hostname { |