xbps-fetch: TIMEOUT_CONNECTION to customize time waiting for response
This commit is contained in:
parent
df9b637ee5
commit
5737d9a941
@ -82,6 +82,10 @@ Overrides the default CA certificates path, by default set to
|
|||||||
Sets the SSL/TLS client verification certificate file.
|
Sets the SSL/TLS client verification certificate file.
|
||||||
.It Sy SSL_CLIENT_KEY_FILE
|
.It Sy SSL_CLIENT_KEY_FILE
|
||||||
Sets the SSL/TLS client verification key file.
|
Sets the SSL/TLS client verification key file.
|
||||||
|
.It Sy CONNECTION_TIMEOUT
|
||||||
|
Sets connection timeout in milliseconds
|
||||||
|
instead of default value of 5 minutes.
|
||||||
|
When -1, waits indefinitely.
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr xbps-checkvers 1 ,
|
.Xr xbps-checkvers 1 ,
|
||||||
|
@ -428,6 +428,31 @@ fetch_socks5(conn_t *conn, struct url *url, struct url *socks, int verbose)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_conn_timeout(void)
|
||||||
|
{
|
||||||
|
static int result = -2;
|
||||||
|
char *conn_timeout;
|
||||||
|
|
||||||
|
if (result != -2) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
conn_timeout = getenv("CONNECTION_TIMEOUT");
|
||||||
|
if (conn_timeout) {
|
||||||
|
char *char_read = conn_timeout;
|
||||||
|
long from_env = strtol(conn_timeout, &char_read, 10);
|
||||||
|
if (from_env < -1 || char_read == conn_timeout) {
|
||||||
|
from_env = fetchConnTimeout;
|
||||||
|
}
|
||||||
|
result = from_env > INT_MAX ? INT_MAX: from_env;
|
||||||
|
} else {
|
||||||
|
result = fetchConnTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Happy Eyeballs (RFC8305):
|
* Happy Eyeballs (RFC8305):
|
||||||
*
|
*
|
||||||
@ -442,6 +467,8 @@ fetch_socks5(conn_t *conn, struct url *url, struct url *socks, int verbose)
|
|||||||
* connections with the failing address family.
|
* connections with the failing address family.
|
||||||
*
|
*
|
||||||
* If there are no more addresses to attempt, wait for
|
* If there are no more addresses to attempt, wait for
|
||||||
|
* CONNECTION_TIMEOUT milliseconds if given, where value
|
||||||
|
* -1 means waiting for response indefinitely, else
|
||||||
* `fetchConnTimeout` and return the first established
|
* `fetchConnTimeout` and return the first established
|
||||||
* connection.
|
* connection.
|
||||||
*
|
*
|
||||||
@ -455,6 +482,7 @@ static int
|
|||||||
happy_eyeballs_connect(struct addrinfo *res0, int verbose)
|
happy_eyeballs_connect(struct addrinfo *res0, int verbose)
|
||||||
{
|
{
|
||||||
static int unreach = 0;
|
static int unreach = 0;
|
||||||
|
int connTimeout = get_conn_timeout();
|
||||||
struct pollfd *pfd;
|
struct pollfd *pfd;
|
||||||
struct addrinfo *res;
|
struct addrinfo *res;
|
||||||
const char *bindaddr;
|
const char *bindaddr;
|
||||||
@ -522,10 +550,10 @@ happy_eyeballs_connect(struct addrinfo *res0, int verbose)
|
|||||||
family = AF_INET6;
|
family = AF_INET6;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
timeout = connTimeout;
|
||||||
/* no more connections to try */
|
/* no more connections to try */
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fetch_info("attempted to connect to all addresses, waiting...");
|
fetch_info("attempted to connect to all addresses, waiting...");
|
||||||
timeout = fetchConnTimeout;
|
|
||||||
done = 1;
|
done = 1;
|
||||||
goto wait;
|
goto wait;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user