throw PDNSException("No local address specified");
}
+ const uint16_t defaultLocalPort = ::arg().asNum("local-port");
for (const auto& localAddress : localAddresses) {
- ServiceTuple st;
- st.port = ::arg().asNum("local-port");
- parseService(localAddress, st);
-
- ComboAddress address;
-
- address.reset();
- address.sin4.sin_family = AF_INET;
- if (!IpToU32(st.host.c_str(), (uint32_t*)&address.sin4.sin_addr.s_addr)) {
- address.sin6.sin6_family = AF_INET6;
- if (makeIPv6sockaddr(st.host, &address.sin6) < 0)
- throw PDNSException("Unable to resolve local address for UDP server on '" + st.host + "'");
- }
-
+ ComboAddress address{localAddress, defaultLocalPort};
const int socketFd = socket(address.sin4.sin_family, SOCK_DGRAM, 0);
if (socketFd < 0) {
throw PDNSException("Making a UDP server socket for resolver: " + stringerror());
SLOG(g_log << Logger::Error << e.what() << endl,
log->error(Logr::Error, e.what(), "Exception while setting socker buffer size"));
}
- address.sin4.sin_port = htons(st.port);
if (g_reusePort) {
#if defined(SO_REUSEPORT_LB)
socklen_t socklen = address.getSocklen();
if (::bind(socketFd, (struct sockaddr*)&address, socklen) < 0) {
- throw PDNSException("Resolver binding to server socket on port " + std::to_string(st.port) + " for " + st.host + ": " + stringerror());
+ throw PDNSException("Resolver binding to server socket on " + address.toStringWithPort() + ": " + stringerror());
}
setNonBlocking(socketFd);
}
auto first = true;
+ const uint16_t defaultLocalPort = ::arg().asNum("local-port");
for (const auto& localAddress : localAddresses) {
- ServiceTuple st;
- st.port = ::arg().asNum("local-port");
- parseService(localAddress, st);
-
- ComboAddress address;
-
- address.reset();
- address.sin4.sin_family = AF_INET;
- if (!IpToU32(st.host, (uint32_t*)&address.sin4.sin_addr.s_addr)) {
- address.sin6.sin6_family = AF_INET6;
- if (makeIPv6sockaddr(st.host, &address.sin6) < 0)
- throw PDNSException("Unable to resolve local address for TCP server on '" + st.host + "'");
- }
-
+ ComboAddress address{localAddress, defaultLocalPort};
const int socketFd = socket(address.sin6.sin6_family, SOCK_STREAM, 0);
if (socketFd < 0) {
throw PDNSException("Making a TCP server socket for resolver: " + stringerror());
#endif
}
- address.sin4.sin_port = htons(st.port);
socklen_t socklen = address.sin4.sin_family == AF_INET ? sizeof(address.sin4) : sizeof(address.sin6);
if (::bind(socketFd, (struct sockaddr*)&address, socklen) < 0) {
- throw PDNSException("Binding TCP server socket for " + st.host + ": " + stringerror());
+ throw PDNSException("Binding TCP server socket for " + address.toStringWithPort() + ": " + stringerror());
}
setNonBlocking(socketFd);