From 96bf0ad5ded6fac6a221c4b47539d656500f128e Mon Sep 17 00:00:00 2001 From: arvidn Date: Sat, 16 Dec 2017 17:36:26 +0100 Subject: [PATCH] fix reopening of listen sockets when disabling force-proxy --- simulation/libsimulator | 2 +- src/session_impl.cpp | 37 +++++++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/simulation/libsimulator b/simulation/libsimulator index 5688f98f7..bbba24fc9 160000 --- a/simulation/libsimulator +++ b/simulation/libsimulator @@ -1 +1 @@ -Subproject commit 5688f98f79279de6eee99ef10d54fc8e83587fe9 +Subproject commit bbba24fc9caf24261e67028b7f8f9b89b832e9eb diff --git a/src/session_impl.cpp b/src/session_impl.cpp index 6740c3e40..39a0469a6 100644 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -6373,6 +6373,31 @@ namespace { void session_impl::update_force_proxy() { + if (!m_settings.get_bool(settings_pack::force_proxy)) + { +#ifndef TORRENT_DISABLE_LOGGING + session_log("force-proxy disabled"); +#endif + // we need to close and remove all listen sockets during a transition + // from force-proxy to not-force-proxy. reopen_listen_sockets() won't + // do anything with half-opened sockets. + error_code ec; + for (auto& i : m_listen_sockets) + { + if (i->udp_sock) i->udp_sock->sock.close(); + if (i->sock) i->sock->close(ec); + } + m_listen_sockets.clear(); + return; + } + +#ifndef TORRENT_DISABLE_LOGGING + session_log("force-proxy enabled"); +#endif + + // when enabling force-proxy, we no longer wand to accept connections via + // a regular listen socket, only via a proxy. We also want to enable + // force-proxy on all udp sockets for (auto& i : m_listen_sockets) { i->udp_sock->sock.set_force_proxy(m_settings.get_bool(settings_pack::force_proxy)); @@ -6386,18 +6411,6 @@ namespace { } } - if (!m_settings.get_bool(settings_pack::force_proxy)) - { -#ifndef TORRENT_DISABLE_LOGGING - session_log("force-proxy disabled"); -#endif - return; - } - -#ifndef TORRENT_DISABLE_LOGGING - session_log("force-proxy enabled"); -#endif - // enable force_proxy mode. We don't want to accept any incoming // connections, except through a proxy. stop_lsd();