]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix the Windows paths modified for load balanced sockets
authorOndřej Surý <ondrej@isc.org>
Tue, 5 Apr 2022 09:31:59 +0000 (11:31 +0200)
committerOndřej Surý <ondrej@isc.org>
Tue, 5 Apr 2022 09:53:18 +0000 (11:53 +0200)
When backporting the load balanced sockets to BIND 9.16, the Windows
specific paths were missed.  Add the #if(n)def _WIN32 back into the
appropriate places.

lib/isc/netmgr/tcp.c
lib/isc/netmgr/tcpdns.c
lib/isc/netmgr/udp.c

index 3e3e071c7d061d4971e3e1be6749f989b0679a04..a8d1dba6d4afd5cee80ff3ee05af0dcb7d0c6258 100644 (file)
@@ -369,10 +369,12 @@ isc__nm_tcp_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) {
        result = isc__nm_socket_reuse(sock);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
 
+#ifndef _WIN32
        if (mgr->load_balance_sockets) {
                result = isc__nm_socket_reuse_lb(sock);
                RUNTIME_CHECK(result == ISC_R_SUCCESS);
        }
+#endif
 
        return (sock);
 }
@@ -397,6 +399,10 @@ start_tcp_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        csock->pquota = sock->pquota;
        isc_quota_cb_init(&csock->quotacb, quota_accept_cb, csock);
 
+#ifdef _WIN32
+       UNUSED(fd);
+       csock->fd = isc__nm_tcp_lb_socket(mgr, iface->type.sa.sa_family);
+#else
        if (mgr->load_balance_sockets) {
                UNUSED(fd);
                csock->fd = isc__nm_tcp_lb_socket(mgr,
@@ -404,6 +410,7 @@ start_tcp_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        } else {
                csock->fd = dup(fd);
        }
+#endif
        REQUIRE(csock->fd >= 0);
 
        ievent = isc__nm_get_netievent_tcplisten(mgr, csock);
@@ -455,9 +462,11 @@ isc_nm_listentcp(isc_nm_t *mgr, isc_sockaddr_t *iface,
        sock->tid = 0;
        sock->fd = -1;
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                fd = isc__nm_tcp_lb_socket(mgr, iface->type.sa.sa_family);
        }
+#endif
 
        isc_barrier_init(&sock->startlistening, sock->nchildren);
 
@@ -472,9 +481,11 @@ isc_nm_listentcp(isc_nm_t *mgr, isc_sockaddr_t *iface,
                start_tcp_child(mgr, iface, sock, fd, isc_nm_tid());
        }
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                isc__nm_closesocket(fd);
        }
+#endif
 
        LOCK(&sock->lock);
        while (atomic_load(&sock->rchildren) != sock->nchildren) {
@@ -547,6 +558,14 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                flags = UV_TCP_IPV6ONLY;
        }
 
+#ifdef _WIN32
+       r = isc_uv_tcp_freebind(&sock->uv_handle.tcp, &sock->iface.type.sa,
+                               flags);
+       if (r < 0) {
+               isc__nm_incstats(sock->mgr, sock->statsindex[STATID_BINDFAIL]);
+               goto done;
+       }
+#else
        if (mgr->load_balance_sockets) {
                r = isc_uv_tcp_freebind(&sock->uv_handle.tcp,
                                        &sock->iface.type.sa, flags);
@@ -572,6 +591,7 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                                sock->parent->uv_handle.tcp.flags;
                }
        }
+#endif
 
        /*
         * The callback will run in the same thread uv_listen() was called
index f5b2ec56b6e37a34e42e5668ca7be0e4a0d4741f..e287f0a2820966c9696b9e4cedf0a025a29e926f 100644 (file)
@@ -332,10 +332,12 @@ isc__nm_tcpdns_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) {
        result = isc__nm_socket_reuse(sock);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
 
+#ifndef _WIN32
        if (mgr->load_balance_sockets) {
                result = isc__nm_socket_reuse_lb(sock);
                RUNTIME_CHECK(result == ISC_R_SUCCESS);
        }
+#endif
 
        return (sock);
 }
@@ -370,6 +372,10 @@ start_tcpdns_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        csock->pquota = sock->pquota;
        isc_quota_cb_init(&csock->quotacb, quota_accept_cb, csock);
 
+#ifdef _WIN32
+       UNUSED(fd);
+       csock->fd = isc__nm_tcpdns_lb_socket(mgr, iface->type.sa.sa_family);
+#else
        if (mgr->load_balance_sockets) {
                UNUSED(fd);
                csock->fd = isc__nm_tcpdns_lb_socket(mgr,
@@ -377,6 +383,7 @@ start_tcpdns_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        } else {
                csock->fd = dup(fd);
        }
+#endif
        REQUIRE(csock->fd >= 0);
 
        ievent = isc__nm_get_netievent_tcpdnslisten(mgr, csock);
@@ -421,9 +428,11 @@ isc_nm_listentcpdns(isc_nm_t *mgr, isc_sockaddr_t *iface,
        sock->tid = 0;
        sock->fd = -1;
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                fd = isc__nm_tcpdns_lb_socket(mgr, iface->type.sa.sa_family);
        }
+#endif
 
        isc_barrier_init(&sock->startlistening, sock->nchildren);
 
@@ -438,9 +447,11 @@ isc_nm_listentcpdns(isc_nm_t *mgr, isc_sockaddr_t *iface,
                start_tcpdns_child(mgr, iface, sock, fd, isc_nm_tid());
        }
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                isc__nm_closesocket(fd);
        }
+#endif
 
        LOCK(&sock->lock);
        while (atomic_load(&sock->rchildren) != sock->nchildren) {
@@ -513,6 +524,14 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                flags = UV_TCP_IPV6ONLY;
        }
 
+#ifdef _WIN32
+       r = isc_uv_tcp_freebind(&sock->uv_handle.tcp, &sock->iface.type.sa,
+                               flags);
+       if (r < 0) {
+               isc__nm_incstats(sock->mgr, sock->statsindex[STATID_BINDFAIL]);
+               goto done;
+       }
+#else
        if (mgr->load_balance_sockets) {
                r = isc_uv_tcp_freebind(&sock->uv_handle.tcp,
                                        &sock->iface.type.sa, flags);
@@ -538,6 +557,7 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                                sock->parent->uv_handle.tcp.flags;
                }
        }
+#endif
 
        /*
         * The callback will run in the same thread uv_listen() was called
index 9a6546026157e8e1f6f93bcc79efae7746342e45..45e84d49bb290535f31931a13ce5137645024598 100644 (file)
@@ -72,10 +72,12 @@ isc__nm_udp_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) {
        result = isc__nm_socket_reuse(sock);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
 
+#ifndef _WIN32
        if (mgr->load_balance_sockets) {
                result = isc__nm_socket_reuse_lb(sock);
                RUNTIME_CHECK(result == ISC_R_SUCCESS);
        }
+#endif
 
        return (sock);
 }
@@ -97,6 +99,10 @@ start_udp_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        csock->extrahandlesize = sock->extrahandlesize;
        csock->tid = tid;
 
+#ifdef _WIN32
+       UNUSED(fd);
+       csock->fd = isc__nm_udp_lb_socket(mgr, iface->type.sa.sa_family);
+#else
        if (mgr->load_balance_sockets) {
                UNUSED(fd);
                csock->fd = isc__nm_udp_lb_socket(mgr,
@@ -104,6 +110,7 @@ start_udp_child(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nmsocket_t *sock,
        } else {
                csock->fd = dup(fd);
        }
+#endif
        REQUIRE(csock->fd >= 0);
 
        ievent = isc__nm_get_netievent_udplisten(mgr, csock);
@@ -154,9 +161,11 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nm_recv_cb_t cb,
        sock->tid = 0;
        sock->fd = -1;
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                fd = isc__nm_udp_lb_socket(mgr, iface->type.sa.sa_family);
        }
+#endif
 
        isc_barrier_init(&sock->startlistening, sock->nchildren);
 
@@ -171,9 +180,11 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nm_recv_cb_t cb,
                start_udp_child(mgr, iface, sock, fd, isc_nm_tid());
        }
 
+#ifndef _WIN32
        if (!mgr->load_balance_sockets) {
                isc__nm_closesocket(fd);
        }
+#endif
 
        LOCK(&sock->lock);
        while (atomic_load(&sock->rchildren) != sock->nchildren) {
@@ -249,6 +260,14 @@ isc__nm_async_udplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                uv_bind_flags |= UV_UDP_IPV6ONLY;
        }
 
+#ifdef _WIN32
+       r = isc_uv_udp_freebind(&sock->uv_handle.udp,
+                               &sock->parent->iface.type.sa, uv_bind_flags);
+       if (r < 0) {
+               isc__nm_incstats(sock->mgr, sock->statsindex[STATID_BINDFAIL]);
+               goto done;
+       }
+#else
        if (mgr->load_balance_sockets) {
                r = isc_uv_udp_freebind(&sock->uv_handle.udp,
                                        &sock->parent->iface.type.sa,
@@ -277,6 +296,7 @@ isc__nm_async_udplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                                sock->parent->uv_handle.udp.flags;
                }
        }
+#endif
 
 #ifdef ISC_RECV_BUFFER_SIZE
        uv_recv_buffer_size(&sock->uv_handle.handle,