From: Remi Gacogne Date: Wed, 22 Jun 2022 11:36:47 +0000 (+0200) Subject: dnsdist: Bind to the requested src interface without a src address in auto-discovery... X-Git-Tag: auth-4.8.0-alpha0~44^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=33363b1cc1dbb8cc800019c6ee228daa03673e38;p=thirdparty%2Fpdns.git dnsdist: Bind to the requested src interface without a src address in auto-discovery as well --- 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);