diff --git a/libtransmission/net.cc b/libtransmission/net.cc index 4c2f559fa..00e9441f3 100644 --- a/libtransmission/net.cc +++ b/libtransmission/net.cc @@ -326,13 +326,17 @@ tr_socket_t tr_netBindTCPImpl(tr_address const& addr, tr_port port, bool suppres (void)setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, reinterpret_cast(&optval), sizeof(optval)); (void)evutil_make_listen_socket_reuseable(fd); - if (addr.is_ipv6() && evutil_make_listen_socket_ipv6only(fd) != 0 && +#ifdef IPV6_V6ONLY + // TODO(tearfur): Consider using `evutil_make_listen_socket_ipv6only` once minimum libevent version is bumped to 2.1.9 or above + if (addr.is_ipv6() && + setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&optval), sizeof(optval)) == -1 && sockerrno != ENOPROTOOPT) // if the kernel doesn't support it, ignore it { *err_out = sockerrno; tr_net_close_socket(fd); return TR_BAD_SOCKET; } +#endif auto const [sock, addrlen] = tr_socket_address::to_sockaddr(addr, port);