diff --git a/libtransmission/tr-udp.cc b/libtransmission/tr-udp.cc index 869f9b224..765a8bce0 100644 --- a/libtransmission/tr-udp.cc +++ b/libtransmission/tr-udp.cc @@ -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(&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(&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)));