From 28e32b57b6a9966552b515ad4fec2fef8416a8ae Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Tue, 25 Sep 2012 18:57:50 +0000 Subject: [PATCH] merged UDP socket fix from RC_0_16 --- ChangeLog | 1 + src/kademlia/dht_tracker.cpp | 9 ++++++++- src/udp_socket.cpp | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ecbd3de71..e4a43098c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ * fix uTP edge case where udp socket buffer fills up * fix nagle implementation in uTP + * fixed UDP socket error causing it to fail on Win7 * update use of boost.system to not use deprecated functions * fix GIL issue in python bindings. Deprecated extension support in python * fixed bug where setting upload slots to -1 would not mean infinite diff --git a/src/kademlia/dht_tracker.cpp b/src/kademlia/dht_tracker.cpp index 8dd3fb233..9c459784a 100644 --- a/src/kademlia/dht_tracker.cpp +++ b/src/kademlia/dht_tracker.cpp @@ -432,7 +432,14 @@ namespace libtorrent { namespace dht { if (ec == asio::error::connection_refused || ec == asio::error::connection_reset - || ec == asio::error::connection_aborted) + || ec == asio::error::connection_aborted +#ifdef WIN32 + || ec == error_code(ERROR_HOST_UNREACHABLE, get_system_category()) + || ec == error_code(ERROR_PORT_UNREACHABLE, get_system_category()) + || ec == error_code(ERROR_CONNECTION_REFUSED, get_system_category()) + || ec == error_code(ERROR_CONNECTION_ABORTED, get_system_category()) +#endif + ) { m_dht.unreachable(ep); } diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 14b94b66f..9dfe3e1be 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -388,6 +388,12 @@ void udp_socket::on_read_impl(udp::socket* s, udp::endpoint const& ep #ifdef WIN32 // ERROR_MORE_DATA means the same thing as EMSGSIZE && e != error_code(ERROR_MORE_DATA, get_system_category()) + && e != error_code(ERROR_HOST_UNREACHABLE, get_system_category()) + && e != error_code(ERROR_PORT_UNREACHABLE, get_system_category()) + && e != error_code(ERROR_RETRY, get_system_category()) + && e != error_code(ERROR_NETWORK_UNREACHABLE, get_system_category()) + && e != error_code(ERROR_CONNECTION_REFUSED, get_system_category()) + && e != error_code(ERROR_CONNECTION_ABORTED, get_system_category()) #endif && e != asio::error::message_size) {