urldata: move async resolver state from easy handle to connectdata

- resolving is done for a connection, not for every transfer
- save create/dup/free of a cares channel for each transfer
- check values of setopt calls against a local channel if no
  connection has been attached yet, when needed.

Closes #12198
This commit is contained in:
Stefan Eissing 2023-10-25 12:31:34 +02:00 committed by Daniel Stenberg
parent 910f740ce2
commit 56a4db2e4e
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
10 changed files with 147 additions and 127 deletions

View file

@ -917,6 +917,9 @@ struct connectdata {
multi_done(). This entry will be NULL if the connection is reused as then
there is no name resolve done. */
struct Curl_dns_entry *dns_entry;
#ifdef USE_CURL_ASYNC
struct Curl_async resolve_async; /* asynchronous name resolver data */
#endif
/* 'remote_addr' is the particular IP we connected to. it is owned, set
* and NULLed by the connected socket filter (if there is one). */
@ -1374,9 +1377,6 @@ struct UrlState {
#endif
struct auth authhost; /* auth details for host */
struct auth authproxy; /* auth details for proxy */
#ifdef USE_CURL_ASYNC
struct Curl_async async; /* asynchronous name resolver data */
#endif
#if defined(USE_OPENSSL)
/* void instead of ENGINE to avoid bleeding OpenSSL into this header */