]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Set netlink socket to be non-blocking
authorArne Schwabe <arne@rfc2549.org>
Wed, 8 Mar 2023 15:19:45 +0000 (16:19 +0100)
committerGert Doering <gert@greenie.muc.de>
Thu, 9 Mar 2023 17:37:48 +0000 (18:37 +0100)
Even though we use select/poll to explicitly query when the netlink
socket is ready for read, sometimes we end up reading from the socket
when it is not ready to read and then the process hangs for several
seconds (20-30s). Avoid this situation by setting the socket to be
non-blocking, so we get a status in this case that allows us to continue.

Change-Id: I35447c23a9350176007df5455bf9451021e9856d
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20230308151945.3670151-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26353.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/dco_linux.c

index c84f9cfe1baafcc6708d121173ccfcde6e248a7c..3ca5b50be99a5284ec572aecde1ea11a411d3b50 100644 (file)
@@ -355,7 +355,9 @@ ovpn_dco_init_netlink(dco_context_t *dco)
             nl_geterror(ret));
     }
 
+    /* set close on exec and non-block on the netlink socket */
     set_cloexec(nl_socket_get_fd(dco->nl_sock));
+    set_nonblock(nl_socket_get_fd(dco->nl_sock));
 
     dco->nl_cb = nl_cb_alloc(NL_CB_DEFAULT);
     if (!dco->nl_cb)