From 33363b1cc1dbb8cc800019c6ee228daa03673e38 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 22 Jun 2022 13:36:47 +0200 Subject: [PATCH] dnsdist: Bind to the requested src interface without a src address in auto-discovery as well --- pdns/dnsdistdist/dnsdist-discovery.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-discovery.cc b/pdns/dnsdistdist/dnsdist-discovery.cc index 5cca42b15f..51a634c26e 100644 --- a/pdns/dnsdistdist/dnsdist-discovery.cc +++ b/pdns/dnsdistdist/dnsdist-discovery.cc @@ -254,6 +254,13 @@ bool ServiceDiscovery::getDiscoveredConfig(const UpgradeableBackend& upgradeable Socket sock(addr.sin4.sin_family, SOCK_STREAM); sock.setNonBlocking(); + +#ifdef SO_BINDTODEVICE + if (!backend->d_config.sourceItfName.empty()) { + setsockopt(sock.getHandle(), SOL_SOCKET, SO_BINDTODEVICE, backend->d_config.sourceItfName.c_str(), backend->d_config.sourceItfName.length()); + } +#endif + if (!IsAnyAddress(backend->d_config.sourceAddr)) { sock.setReuseAddr(); #ifdef IP_BIND_ADDRESS_NO_PORT @@ -261,12 +268,6 @@ bool ServiceDiscovery::getDiscoveredConfig(const UpgradeableBackend& upgradeable SSetsockopt(sock.getHandle(), SOL_IP, IP_BIND_ADDRESS_NO_PORT, 1); } #endif - - if (!backend->d_config.sourceItfName.empty()) { -#ifdef SO_BINDTODEVICE - setsockopt(sock.getHandle(), SOL_SOCKET, SO_BINDTODEVICE, backend->d_config.sourceItfName.c_str(), backend->d_config.sourceItfName.length()); -#endif - } sock.bind(backend->d_config.sourceAddr); } sock.connect(addr, backend->d_config.tcpConnectTimeout); -- 2.47.2