mirror of
https://github.com/curl/curl.git
synced 2025-04-18 16:30:45 +08:00
urldata: make maxconnects a 32 bit value
"2^32 idle connections ought to be enough for anybody" Closes #12375
This commit is contained in:
parent
14612e5fbe
commit
2d06eebf28
@ -379,15 +379,12 @@ conncache_find_first_connection(struct conncache *connc)
|
||||
bool Curl_conncache_return_conn(struct Curl_easy *data,
|
||||
struct connectdata *conn)
|
||||
{
|
||||
/* data->multi->maxconnects can be negative, deal with it. */
|
||||
size_t maxconnects =
|
||||
(data->multi->maxconnects < 0) ? data->multi->num_easy * 4:
|
||||
data->multi->maxconnects;
|
||||
unsigned int maxconnects = !data->multi->maxconnects ?
|
||||
data->multi->num_easy * 4: data->multi->maxconnects;
|
||||
struct connectdata *conn_candidate = NULL;
|
||||
|
||||
conn->lastused = Curl_now(); /* it was used up until now */
|
||||
if(maxconnects > 0 &&
|
||||
Curl_conncache_size(data) > maxconnects) {
|
||||
if(maxconnects && Curl_conncache_size(data) > maxconnects) {
|
||||
infof(data, "Connection cache is full, closing the oldest one");
|
||||
|
||||
conn_candidate = Curl_conncache_extract_oldest(data);
|
||||
|
@ -744,7 +744,7 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events)
|
||||
return CURLE_RECURSIVE_API_CALL;
|
||||
|
||||
/* Copy the MAXCONNECTS option to the multi handle */
|
||||
curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, data->set.maxconnects);
|
||||
curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)data->set.maxconnects);
|
||||
|
||||
mcode = curl_multi_add_handle(multi, data);
|
||||
if(mcode) {
|
||||
|
10
lib/multi.c
10
lib/multi.c
@ -396,9 +396,6 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
|
||||
Curl_llist_init(&multi->msgsent, NULL);
|
||||
|
||||
multi->multiplexing = TRUE;
|
||||
|
||||
/* -1 means it not set by user, use the default value */
|
||||
multi->maxconnects = -1;
|
||||
multi->max_concurrent_streams = 100;
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
@ -3239,6 +3236,7 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
|
||||
{
|
||||
CURLMcode res = CURLM_OK;
|
||||
va_list param;
|
||||
unsigned long uarg;
|
||||
|
||||
if(!GOOD_MULTI_HANDLE(multi))
|
||||
return CURLM_BAD_HANDLE;
|
||||
@ -3271,7 +3269,9 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
|
||||
multi->timer_userp = va_arg(param, void *);
|
||||
break;
|
||||
case CURLMOPT_MAXCONNECTS:
|
||||
multi->maxconnects = va_arg(param, long);
|
||||
uarg = va_arg(param, unsigned long);
|
||||
if(uarg <= UINT_MAX)
|
||||
multi->maxconnects = (unsigned int)uarg;
|
||||
break;
|
||||
case CURLMOPT_MAX_HOST_CONNECTIONS:
|
||||
multi->max_host_connections = va_arg(param, long);
|
||||
@ -3725,7 +3725,7 @@ struct Curl_easy **curl_multi_get_handles(struct Curl_multi *multi)
|
||||
struct Curl_easy **a = malloc(sizeof(struct Curl_easy *) *
|
||||
(multi->num_easy + 1));
|
||||
if(a) {
|
||||
int i = 0;
|
||||
unsigned int i = 0;
|
||||
struct Curl_easy *e = multi->easyp;
|
||||
while(e) {
|
||||
DEBUGASSERT(i < multi->num_easy);
|
||||
|
@ -93,9 +93,9 @@ struct Curl_multi {
|
||||
struct Curl_easy *easyp;
|
||||
struct Curl_easy *easylp; /* last node */
|
||||
|
||||
int num_easy; /* amount of entries in the linked list above. */
|
||||
int num_alive; /* amount of easy handles that are added but have not yet
|
||||
reached COMPLETE state */
|
||||
unsigned int num_easy; /* amount of entries in the linked list above. */
|
||||
unsigned int num_alive; /* amount of easy handles that are added but have
|
||||
not yet reached COMPLETE state */
|
||||
|
||||
struct Curl_llist msglist; /* a list of messages from completed transfers */
|
||||
|
||||
@ -136,9 +136,6 @@ struct Curl_multi {
|
||||
/* Shared connection cache (bundles)*/
|
||||
struct conncache conn_cache;
|
||||
|
||||
long maxconnects; /* if >0, a fixed limit of the maximum number of entries
|
||||
we're allowed to grow the connection cache to */
|
||||
|
||||
long max_host_connections; /* if >0, a fixed limit of the maximum number
|
||||
of connections per host */
|
||||
|
||||
@ -150,8 +147,6 @@ struct Curl_multi {
|
||||
void *timer_userp;
|
||||
struct curltime timer_lastcall; /* the fixed time for the timeout for the
|
||||
previous callback */
|
||||
unsigned int max_concurrent_streams;
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
WSAEVENT wsa_event; /* winsock event used for waits */
|
||||
#else
|
||||
@ -160,6 +155,10 @@ struct Curl_multi {
|
||||
0 is used for read, 1 is used for write */
|
||||
#endif
|
||||
#endif
|
||||
unsigned int max_concurrent_streams;
|
||||
unsigned int maxconnects; /* if >0, a fixed limit of the maximum number of
|
||||
entries we're allowed to grow the connection
|
||||
cache to */
|
||||
#define IPV6_UNKNOWN 0
|
||||
#define IPV6_DEAD 1
|
||||
#define IPV6_WORKS 2
|
||||
|
@ -262,10 +262,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
* Set the absolute number of maximum simultaneous alive connection that
|
||||
* libcurl is allowed to have.
|
||||
*/
|
||||
arg = va_arg(param, long);
|
||||
if(arg < 0)
|
||||
uarg = va_arg(param, unsigned long);
|
||||
if(uarg > UINT_MAX)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.maxconnects = arg;
|
||||
data->set.maxconnects = (unsigned int)uarg;
|
||||
break;
|
||||
case CURLOPT_FORBID_REUSE:
|
||||
/*
|
||||
|
@ -1824,8 +1824,6 @@ struct UserDefined {
|
||||
int tcp_keepidle; /* seconds in idle before sending keepalive probe */
|
||||
int tcp_keepintvl; /* seconds between TCP keepalive probes */
|
||||
|
||||
size_t maxconnects; /* Max idle connections in the connection cache */
|
||||
|
||||
long expect_100_timeout; /* in milliseconds */
|
||||
#if defined(USE_HTTP2) || defined(USE_HTTP3)
|
||||
struct Curl_data_priority priority;
|
||||
@ -1850,6 +1848,7 @@ struct UserDefined {
|
||||
BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some
|
||||
recipients */
|
||||
#endif
|
||||
unsigned int maxconnects; /* Max idle connections in the connection cache */
|
||||
unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
|
||||
IMAP or POP3 or others! (type: curl_usessl)*/
|
||||
unsigned char connect_only; /* make connection/request, then let
|
||||
|
Loading…
x
Reference in New Issue
Block a user