refactor: net, lookup hostname using any valid Ip4 or Ip6 address

fixes: #9110
This commit is contained in:
sithlord48 2025-12-16 10:09:48 -05:00 committed by Nick Bolton
parent 6982ce824f
commit 7f3d661e31

View file

@ -122,36 +122,33 @@ size_t NetworkAddress::resolve(size_t index)
} }
try { try {
// if hostname is empty then use wildcard address otherwise look
// up the name.
if (m_hostname.empty()) { if (m_hostname.empty()) {
m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet); m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet);
resolvedAddressesCount = 1; resolvedAddressesCount = 1;
} else { } else {
// Logic for temporary filtring only ipv4 addresses std::vector<ArchNetAddress> ipAddresses;
std::vector<ArchNetAddress> ipv4OnlyAddresses;
{ {
auto addresses = ARCH->nameToAddr(m_hostname); auto addresses = ARCH->nameToAddr(m_hostname);
for (auto address : addresses) { for (auto address : addresses) {
if (ARCH->getAddrFamily(address) == IArchNetwork::AddressFamily::INet) { if (ARCH->getAddrFamily(address) != IArchNetwork::AddressFamily::Unknown) {
ipv4OnlyAddresses.emplace_back(address); ipAddresses.emplace_back(address);
} else { } else {
ARCH->closeAddr(address); ARCH->closeAddr(address);
} }
} }
} }
resolvedAddressesCount = ipv4OnlyAddresses.size(); resolvedAddressesCount = ipAddresses.size();
if (resolvedAddressesCount <= 0) { if (resolvedAddressesCount <= 0) {
throw ArchNetworkNameUnknownException("Hostname lookup failed"); throw ArchNetworkNameUnknownException("Hostname lookup failed");
} }
if (index < resolvedAddressesCount - 1) { if (index < resolvedAddressesCount - 1) {
m_address = ipv4OnlyAddresses[index]; m_address = ipAddresses[index];
} else { } else {
m_address = ipv4OnlyAddresses[resolvedAddressesCount - 1]; m_address = ipAddresses[resolvedAddressesCount - 1];
} }
for (auto address : ipv4OnlyAddresses) { for (auto address : ipAddresses) {
if (m_address != address) { if (m_address != address) {
ARCH->closeAddr(address); ARCH->closeAddr(address);
} }