From: Arne Schwabe Date: Sat, 15 Feb 2025 15:24:56 +0000 (+0100) Subject: Reconnect when TCP is on use on network-change management command X-Git-Tag: v2.7_alpha1~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=43abb412dd211836086e27b55f1bcd77626ad6f2;p=thirdparty%2Fopenvpn.git Reconnect when TCP is on use on network-change management command On some newer Android handsets, changing to a different network often does not trigger a TCP reset but continues using the old connection (e.g. using mobile connection when WiFi becomes available) Force a reconnect in these situation to have a more expected beheaviour. Change-Id: Id4febcceecab33ee5189cd67b249a15d12b84799 Signed-off-by: Arne Schwabe Acked-by: Gert Doering Message-Id: <20250215152456.5691-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg30908.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/init.c b/src/openvpn/init.c index da20241d..920f8d70 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -4412,6 +4412,15 @@ management_callback_network_change(void *arg, bool samenetwork) return -1; } + /* On some newer Android handsets, changing to a different network + * often does not trigger a TCP reset but continue using the old + * connection (e.g. using mobile connection when WiFi becomes available */ + struct link_socket_info *lsi = get_link_socket_info(c); + if (lsi && proto_is_tcp(lsi->proto) && !samenetwork) + { + return -2; + } + socketfd = c->c2.link_sockets[0]->sd; if (!c->options.pull || c->c2.tls_multi->use_peer_id || samenetwork) {