1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-03-04 18:48:06 +00:00

fix: use SO_REUSEADDR when binding UDP ports (#4513)

* fix: use SO_REUSEPORT when binding UDP ports

* chore: cast 3rd arg of setsockopt
This commit is contained in:
Charles Kerr 2023-01-01 20:36:20 -06:00 committed by GitHub
parent d338eb3bdc
commit 24eb6ef293
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -144,6 +144,9 @@ tr_session::tr_udp_core::tr_udp_core(tr_session& session, tr_port udp_port)
if (auto sock = socket(PF_INET, SOCK_DGRAM, 0); sock != TR_BAD_SOCKET)
{
auto optval = int{ 1 };
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char const*>(&optval), sizeof(optval));
auto const [addr, is_any] = session_.publicAddress(TR_AF_INET);
auto const [ss, sslen] = addr.to_sockaddr(udp_port_);
@ -171,6 +174,9 @@ tr_session::tr_udp_core::tr_udp_core(tr_session& session, tr_port udp_port)
if (auto sock = socket(PF_INET6, SOCK_DGRAM, 0); sock != TR_BAD_SOCKET)
{
auto optval = int{ 1 };
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char const*>(&optval), sizeof(optval));
auto const [addr, is_any] = session_.publicAddress(TR_AF_INET6);
auto const [ss, sslen] = addr.to_sockaddr(udp_port_);
@ -179,7 +185,7 @@ tr_session::tr_udp_core::tr_udp_core(tr_session& session, tr_port udp_port)
auto const error_code = errno;
tr_logAddWarn(fmt::format(
_("Couldn't bind IPv6 socket {address}: {error} ({error_code})"),
fmt::arg("address", addr.display_name()),
fmt::arg("address", addr.display_name(udp_port_)),
fmt::arg("error", tr_strerror(error_code)),
fmt::arg("error_code", error_code)));