dns: extend CURLOPT_RESOLVE syntax for adding non-permanent entries

Extend the syntax of CURLOPT_RESOLVE strings: allow using a '+' prefix
(similar to the existing '-' prefix for removing entries) to add
DNS cache entries that will time out just like entries that are added
by libcurl itself.

Append " (non-permanent)" to info log message in case a non-permanent
entry is added.

Adjust relevant comments to reflect the new behavior.

Adjust documentation.

Extend unit1607 to test the new functionality.

Closes #6294
This commit is contained in:
Paul Groke 2020-12-10 17:38:14 +01:00 committed by Daniel Stenberg
parent 68dde8e330
commit 8324dc8b1a
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
6 changed files with 82 additions and 40 deletions

View file

@ -1,5 +1,5 @@
Long: resolve
Arg: <host:port:addr[,addr]...>
Arg: <[+]host:port:addr[,addr]...>
Help: Resolve the host+port to this address
Added: 7.21.3
Category: connection
@ -19,10 +19,18 @@ with a specific host and port will be used first.
The provided address set by this option will be used even if --ipv4 or --ipv6
is set to make curl use another IP version.
By prefixing the host with a '+' you can make the entry time out after curl's
default timeout (1 minute). Note that this will only make sense for long
running parallel transfers with a lot of files. In such cases, if this option
is used curl will try to resolve the host as it normally would once the
timeout has expired.
Support for providing the IP address within [brackets] was added in 7.57.0.
Support for providing multiple IP addresses per entry was added in 7.59.0.
Support for resolving with wildcard was added in 7.64.0.
Support for the '+' prefix was was added in 7.75.0.
This option can be used many times to add many host names to resolve.

View file

@ -37,7 +37,7 @@ list of \fBstruct curl_slist\fP structs properly filled in. Use
to clean up an entire list.
Each single name resolve string should be written using the format
HOST:PORT:ADDRESS[,ADDRESS]... where HOST is the name libcurl will try
[+]HOST:PORT:ADDRESS[,ADDRESS]... where HOST is the name libcurl will try
to resolve, PORT is the port number of the service where libcurl wants
to connect to the HOST and ADDRESS is one or more numerical IP
addresses. If you specify multiple ip addresses they need to be
@ -46,14 +46,16 @@ ADDRESS entries can of course be either IPv4 or IPv6 style addressing.
This option effectively pre-populates the DNS cache with entries for the
host+port pair so redirects and everything that operations against the
HOST+PORT will instead use your provided ADDRESS. Addresses set with
\fICURLOPT_RESOLVE(3)\fP will not time-out from the DNS cache like ordinary
entries.
HOST+PORT will instead use your provided ADDRESS.
If the DNS cache already have an entry for the given host+port pair, then
The optional leading "+" signifies whether the new entry should time-out or
not. Entires added with "HOST:..." will never time-out whereas entries added
with "+HOST:..." will time-out just like ordinary DNS cache entries.
If the DNS cache already has an entry for the given host+port pair, then
this entry will be removed and a new entry will be created. This is because
old entry may have have different addresses or be ordinary entries with
time-outs.
the old entry may have have different addresses or a different time-out
setting.
The provided ADDRESS set by this option will be used even if
\fICURLOPT_IPRESOLVE(3)\fP is set to make libcurl use another IP version.
@ -66,6 +68,9 @@ and port number must exactly match what was already added previously.
Support for providing the ADDRESS within [brackets] was added in 7.57.0.
Support for providing multiple IP addresses per entry was added in 7.59.0.
Support for adding non-permanent entries by using the "+" prefix was added in
7.75.0.
.SH DEFAULT
NULL
.SH PROTOCOLS