mirror of
https://github.com/openharmony/third_party_curl.git
synced 2026-08-24 18:26:06 -04:00
630fa26d68
Signed-off-by: mosdhaha <maosiping@huawei.com>
85 lines
2.3 KiB
Diff
85 lines
2.3 KiB
Diff
diff --git a/include/curl/curl.h b/include/curl/curl.h
|
|
index 4efaa5f11..4198c7a53 100644
|
|
--- a/include/curl/curl.h
|
|
+++ b/include/curl/curl.h
|
|
@@ -1129,6 +1129,10 @@ typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy,
|
|
*/
|
|
|
|
typedef enum {
|
|
+#ifdef USE_ARES
|
|
+ CURLOPT(CURLOPT_BALANCED_CONNECTION, CURLOPTTYPE_LONG, 2000),
|
|
+#endif
|
|
+
|
|
/* This is the FILE * or void * the regular output should be written to. */
|
|
CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1),
|
|
|
|
diff --git a/lib/setopt.c b/lib/setopt.c
|
|
index 6a1ef04e9..3b7ad1a53 100644
|
|
--- a/lib/setopt.c
|
|
+++ b/lib/setopt.c
|
|
@@ -2924,6 +2924,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|
return result;
|
|
result = Curl_set_dns_local_ip6(data, data->set.str[STRING_DNS_LOCAL_IP6]);
|
|
break;
|
|
+ case CURLOPT_BALANCED_CONNECTION:
|
|
+ data->set.http_balanced_connection = (0 != va_arg(param, long));
|
|
+ break;
|
|
+
|
|
#endif
|
|
case CURLOPT_TCP_KEEPALIVE:
|
|
data->set.tcp_keepalive = (0 != va_arg(param, long));
|
|
diff --git a/lib/url.c b/lib/url.c
|
|
index e61348b03..f406decab 100644
|
|
--- a/lib/url.c
|
|
+++ b/lib/url.c
|
|
@@ -971,6 +971,9 @@ ConnectionExists(struct Curl_easy *data,
|
|
bool canmultiplex = FALSE;
|
|
struct connectbundle *bundle;
|
|
struct Curl_llist_element *curr;
|
|
+#ifdef USE_ARES
|
|
+ uint min_inuse = UINT_MAX;
|
|
+#endif
|
|
|
|
#ifdef USE_NTLM
|
|
bool wantNTLMhttp = ((data->state.authhost.want & CURLAUTH_NTLM) &&
|
|
@@ -1354,9 +1357,22 @@ ConnectionExists(struct Curl_easy *data,
|
|
continue;
|
|
}
|
|
#endif
|
|
+
|
|
+#ifdef USE_ARES
|
|
/* We have found a connection. Let's stop searching. */
|
|
- chosen = check;
|
|
- break;
|
|
+ if(data->set.http_balanced_connection) {
|
|
+ if(CONN_INUSE(check) < min_inuse) {
|
|
+ chosen = check;
|
|
+ min_inuse = CONN_INUSE(check);
|
|
+ }
|
|
+ } else {
|
|
+#endif
|
|
+ chosen = check;
|
|
+ break;
|
|
+#ifdef USE_ARES
|
|
+ }
|
|
+#endif
|
|
+
|
|
} /* loop over connection bundle */
|
|
|
|
if(chosen) {
|
|
diff --git a/lib/urldata.h b/lib/urldata.h
|
|
index b6702a585..02216c47f 100644
|
|
--- a/lib/urldata.h
|
|
+++ b/lib/urldata.h
|
|
@@ -1894,6 +1894,10 @@ struct UserDefined {
|
|
int tls_ech; /* TLS ECH configuration */
|
|
#endif
|
|
|
|
+#ifdef USE_ARES
|
|
+ BIT(http_balanced_connection); /* balanced HTTP connection */
|
|
+#endif
|
|
+
|
|
BIT(mms_reserved_default_port);
|
|
};
|
|
|