Message ID | 20230308151945.3670151-1-arne@rfc2549.org |
---|---|
State | Accepted |
Headers | show |
Series | [Openvpn-devel] Set netlink socket to be non-blocking | expand |
Hi, On 08/03/2023 16:19, Arne Schwabe wrote: > Even though we use select/poll to explicitly query when the nextlink nextlink -> 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 > seoneds (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> Well spotted! Acked-by: Antonio Quartulli <a@unstable.cc> > --- > src/openvpn/dco_linux.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c > index 1a6566aad..6f1b999bb 100644 > --- a/src/openvpn/dco_linux.c > +++ b/src/openvpn/dco_linux.c > @@ -359,7 +359,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)
I cannot reproduce this particular problem on my Linux/DCO systems here, but with the problem description, the patch makes sense. Minimally tested on a Linux/DCO system. Your patch has been applied to the master and release/2.6 branch. commit 7aa3520768a68fb6a73ab64569c7be5d571f86fc (master) commit 35104bdc937191d49c3505a354444eb6a267e9ee (release/2.6) Author: Arne Schwabe Date: Wed Mar 8 16:19:45 2023 +0100 Set netlink socket to be non-blocking 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> -- kind regards, Gert Doering
diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c index 1a6566aad..6f1b999bb 100644 --- a/src/openvpn/dco_linux.c +++ b/src/openvpn/dco_linux.c @@ -359,7 +359,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)
Even though we use select/poll to explicitly query when the nextlink 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 seoneds (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> --- src/openvpn/dco_linux.c | 2 ++ 1 file changed, 2 insertions(+)