From 1debc21e904ea1df13f88525aa9969a43a930dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavru=C5=A1a?= <marek.vavrusa@nic.cz> Date: Tue, 20 May 2014 10:25:50 +0200 Subject: [PATCH] Revert "udp: added SO_REUSEPORT support" This reverts commit f4de548240d911669a193eb813c1e9277a16570e. refs #239 Conflicts: src/knot/server/udp-handler.c --- src/knot/server/net.c | 5 ----- src/knot/server/udp-handler.c | 33 ++++----------------------------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/src/knot/server/net.c b/src/knot/server/net.c index a55cb89d7..b3054d086 100644 --- a/src/knot/server/net.c +++ b/src/knot/server/net.c @@ -81,11 +81,6 @@ int net_bound_socket(int type, struct sockaddr_storage *ss) int flag = 1; (void) setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag)); - /* Reuse port if available. */ -#if defined(SO_REUSEPORT) - (void) setsockopt(socket, SOL_SOCKET, SO_REUSEPORT, &flag, sizeof(flag)); -#endif - /* Unlink UNIX socket if exists. */ if (ss->ss_family == AF_UNIX) { unlink(addr_str); diff --git a/src/knot/server/udp-handler.c b/src/knot/server/udp-handler.c index 9223368b0..b4f9a5a83 100644 --- a/src/knot/server/udp-handler.c +++ b/src/knot/server/udp-handler.c @@ -451,30 +451,6 @@ void __attribute__ ((constructor)) udp_master_init() #endif /* HAVE_RECVMMSG */ } -static void unbind_ifaces(ifacelist_t *ifaces, fd_set *set, int maxfd) -{ - ref_release((ref_t *)ifaces); -#if defined(SO_REUSEPORT) - for (int fd = 0; fd <= maxfd; ++fd) { - if (FD_ISSET(fd, set)) { - close(fd); - } - } -#endif - FD_ZERO(set); -} - -static int bind_iface(iface_t *iface, fd_set *set) -{ -#if defined(SO_REUSEPORT) - int fd = net_bound_socket(SOCK_DGRAM, &iface->addr); -#else - int fd = iface->fd[IO_UDP]; -#endif - FD_SET(fd, set); - return fd; -} - int udp_master(dthread_t *thread) { unsigned cpu = dt_online_cpus(); @@ -530,14 +506,13 @@ int udp_master(dthread_t *thread) FD_ZERO(&fds); rcu_read_lock(); - unbind_ifaces(ref, &fds, maxfd); - maxfd = 0; - minfd = INT_MAX; + ref_release((ref_t *)ref); ref = handler->server->ifaces; if (ref) { iface_t *i = NULL; WALK_LIST(i, ref->l) { - int fd = bind_iface(i, &fds); + int fd = i->fd[IO_UDP]; + FD_SET(fd, &fds); maxfd = MAX(fd, maxfd); minfd = MIN(fd, minfd); } @@ -573,7 +548,7 @@ int udp_master(dthread_t *thread) } _udp_deinit(rq); - unbind_ifaces(ref, &fds, maxfd); + ref_release((ref_t *)ref); mp_delete(udp.query_ctx.mm.ctx); return KNOT_EOK; } -- GitLab