summaryrefslogtreecommitdiffhomepage
path: root/src/router.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2019-08-08 21:42:15 +0200
committerHans Dedecker <dedeckeh@gmail.com>2019-08-08 21:56:21 +0200
commit000182fe4f94a5a6ec139456a2b74f0cdea13b9c (patch)
tree395235b3c1a2c6ea8cbc1d82ba88a869bbe03561 /src/router.c
parentf6c2242c7af2de8f40f5b6b8e50c350a138bc183 (diff)
router: fix lingering uloop socket descriptor
In case setting one of the socket options fails; make sure the raw socket is removed from the uloop file descriptor list before the socket is closed. In case this is not done and a new raw socket is created with the same fd value odhcpd will not be triggered by uloop in case RS messages are received on the socket as reported in https://github.com/openwrt/odhcpd/issues/135 Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'src/router.c')
-rw-r--r--src/router.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/router.c b/src/router.c
index 0040e7a..c68d0d5 100644
--- a/src/router.c
+++ b/src/router.c
@@ -213,6 +213,9 @@ int router_setup_interface(struct interface *iface, bool enable)
}
out:
if (ret < 0 && iface->router_event.uloop.fd >= 0) {
+ if (iface->router_event.uloop.registered)
+ uloop_fd_delete(&iface->router_event.uloop);
+
close(iface->router_event.uloop.fd);
iface->router_event.uloop.fd = -1;
}