Merge branch 'maint-0.4.7'

This commit is contained in:
David Goulet 2022-12-20 09:09:47 -05:00
commit 713efae94b

View File

@ -2233,6 +2233,30 @@ connection_connect_sockaddr,(connection_t *conn,
tor_socket_strerror(errno)); tor_socket_strerror(errno));
} }
#ifdef IP_BIND_ADDRESS_NO_PORT
static int try_ip_bind_address_no_port = 1;
if (bindaddr && try_ip_bind_address_no_port &&
setsockopt(s, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &(int){1}, sizeof(int))) {
if (errno == EINVAL) {
log_notice(LD_NET, "Tor was built with support for "
"IP_BIND_ADDRESS_NO_PORT, but the current kernel "
"doesn't support it. This might cause Tor to run out "
"of ephemeral ports more quickly.");
try_ip_bind_address_no_port = 0;
} else {
log_warn(LD_NET, "Error setting IP_BIND_ADDRESS_NO_PORT on new "
"connection: %s", tor_socket_strerror(errno));
}
}
#endif
/* From ip(7): Inform the kernel to not reserve an ephemeral port when using
* bind(2) with a port number of 0. The port will later be automatically
* chosen at connect(2) time, in a way that allows sharing a source port as
* long as the 4-tuple is unique.
*
* This is needed for relays using OutboundBindAddresses because the port
* value in the bind address is set to 0. */
#ifdef IP_BIND_ADDRESS_NO_PORT #ifdef IP_BIND_ADDRESS_NO_PORT
static int try_ip_bind_address_no_port = 1; static int try_ip_bind_address_no_port = 1;
if (bindaddr && try_ip_bind_address_no_port && if (bindaddr && try_ip_bind_address_no_port &&