From: Remi Gacogne Date: Thu, 3 Oct 2019 12:27:42 +0000 (+0200) Subject: dnsdist: Apply SO_BINDTODEVICE to health check sockets too X-Git-Tag: dnsdist-1.4.0-rc4~27^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=881e4691615bf44a377738b24772a0babbf4aba8;p=pdns dnsdist: Apply SO_BINDTODEVICE to health check sockets too --- diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index c55002476..fd553dfc7 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -1856,6 +1856,14 @@ try if (!IsAnyAddress(ds->sourceAddr)) { sock.setReuseAddr(); sock.bind(ds->sourceAddr); + if (!ds->sourceItfName.empty()) { +#ifdef SO_BINDTODEVICE + int res = setsockopt(sock.getHandle(), SOL_SOCKET, SO_BINDTODEVICE, ds->sourceItfName.c_str(), ds->sourceItfName.length()); + if (res != 0 && g_verboseHealthChecks) { + infolog("Error settting SO_BINDTODEVICE on the health check socket for backend '%s': %s", ds->getNameWithAddr(), stringerror()); + } +#endif + } } sock.connect(ds->remote); ssize_t sent = udpClientSendRequestToBackend(ds, sock.getHandle(), reinterpret_cast(&packet[0]), packet.size(), true);