From 3b429925fb9b4a822facc6ea9f13b927b6021944 Mon Sep 17 00:00:00 2001 From: Gianmarco De Gregori Date: Fri, 12 Sep 2025 15:12:07 +0200 Subject: [PATCH] Multi-socket win: avoid repeated socket_set() On Windows, multi-socket support failed with mixed protocols due to repeated socket_set() calls, which caused accept() to be triggered before having an event to process. This fix skips socket_set() calls for non-UDP sockets in MODE_SERVER inside multi_io_process_flags(). Change-Id: Ia389fcec50fb2bbc0aa5ad41a2c23c17c04e6e9b Signed-off-by: Gianmarco De Gregori Acked-by: Lev Stipakov Message-Id: <20250912131207.42597-1-frank@lichtenheld.com> URL: https://sourceforge.net/p/openvpn/mailman/message/59232443/ URL: https://gerrit.openvpn.net/c/openvpn/+/1174 Signed-off-by: Gert Doering --- src/openvpn/forward.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c index 03b6a0c6b..5d22fa36a 100644 --- a/src/openvpn/forward.c +++ b/src/openvpn/forward.c @@ -2121,10 +2121,15 @@ multi_io_process_flags(struct context *c, struct event_set *es, const unsigned i /* * Configure event wait based on socket, tuntap flags. + * (for TCP server sockets this happens in + * socket_set_listen_persistent()). */ for (int i = 0; i < c->c1.link_sockets_num; i++) { - socket_set(c->c2.link_sockets[i], es, socket, &c->c2.link_sockets[i]->ev_arg, NULL); + if ((c->options.mode != MODE_SERVER) || (proto_is_dgram(c->c2.link_sockets[i]->info.proto))) + { + socket_set(c->c2.link_sockets[i], es, socket, &c->c2.link_sockets[i]->ev_arg, NULL); + } } tun_set(c->c1.tuntap, es, tuntap, (void *)tun_shift, NULL); -- 2.47.3