diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-02-18 16:33:36 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-02-19 08:18:57 +0100 |
commit | f510a2ec95bd92cc2c566eebdb0376e665b0d2ce (patch) | |
tree | 9b21479df5a7ef1d4447f68f6804b6c20cf14564 | |
parent | 21b33b9a0b505a16027ca0c6de998b36e55d1ece (diff) | |
download | curl-f510a2ec95bd92cc2c566eebdb0376e665b0d2ce.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
-rw-r--r-- | docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 | 5 | ||||
-rw-r--r-- | lib/url.c | 11 | ||||
-rw-r--r-- | lib/urldata.h | 1 |
3 files changed, 13 insertions, 4 deletions
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 index 89a2fc12b..375d5d4d6 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 +++ b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 @@ -5,7 +5,7 @@ .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * -.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms @@ -37,6 +37,9 @@ useful when used with the \fICURLINFO_ACTIVESOCKET(3)\fP option to \fIcurl_easy_getinfo(3)\fP as the library can set up the connection and then the application can obtain the most recently used socket for special data transfers. + +Transfers marked connect only will not reuse any existing connections and +connections marked connect only will not be allowed to get reused. .SH DEFAULT 0 .SH PROTOCOLS @@ -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 { |