diff --git a/src/broadcast_socket.cpp b/src/broadcast_socket.cpp index cfb1a9f1a..d9fd2470f 100644 --- a/src/broadcast_socket.cpp +++ b/src/broadcast_socket.cpp @@ -79,6 +79,8 @@ namespace libtorrent { if (addr.is_v4()) return addr.to_v4() == address_v4::any(); + else if (addr.to_v6().is_v4_mapped()) + return (addr.to_v6().to_v4() == address_v4::any()); else return addr.to_v6() == address_v6::any(); } diff --git a/src/bt_peer_connection.cpp b/src/bt_peer_connection.cpp index 3752c7baf..c96b8ba33 100644 --- a/src/bt_peer_connection.cpp +++ b/src/bt_peer_connection.cpp @@ -1314,7 +1314,11 @@ namespace libtorrent { address_v6::bytes_type bytes; std::copy(myip.begin(), myip.end(), bytes.begin()); - m_ses.set_external_address(address_v6(bytes)); + address_v6 ipv6_address(bytes); + if (ipv6_address.is_v4_mapped()) + m_ses.set_external_address(ipv6_address.to_v4()); + else + m_ses.set_external_address(ipv6_address); } } @@ -1567,7 +1571,7 @@ namespace libtorrent if (t->is_finished()) handshake["upload_only"] = 1; tcp::endpoint ep = m_ses.get_ipv6_interface(); - if (ep != tcp::endpoint()) + if (!is_any(ep.address())) { std::string ipv6_address; std::back_insert_iterator out(ipv6_address);