From abba077ed0613190ea9068e92b12e5827d8ac0be Mon Sep 17 00:00:00 2001 From: Charl Wentzel Date: Mon, 28 Aug 2017 13:17:19 +0200 Subject: [PATCH] Important Update: - SelectableCore: - Skip IP address "0.0.0.0" when resolving localhost --- SelectableCore.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/SelectableCore.cpp b/SelectableCore.cpp index cd3fab2..83a5265 100644 --- a/SelectableCore.cpp +++ b/SelectableCore.cpp @@ -575,11 +575,13 @@ bool CSelectableCore::ResolveAddress( THandle * Handle ) int result; // Check if more addresses - if (Handle->AddressInfo && Handle->AddressInfo->ai_next) - { - // Set next address + if (Handle->AddressInfo) + Handle->AddressInfo = Handle->AddressInfo->ai_next; + if (Handle->AddressInfo && !strcmp( inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr), "0.0.0.0" )) Handle->AddressInfo = Handle->AddressInfo->ai_next; + // Return address + if (Handle->AddressInfo) { if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Use next resolved Address [%s:%s]->[%s:%u]", Name, Handle->Name, Handle->HostName, Handle->PortName, inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr), @@ -610,9 +612,20 @@ bool CSelectableCore::ResolveAddress( THandle * Handle ) return false; } - // Select first address + // Select first address, skip "0.0.0.0" Handle->AddressInfo = Handle->AddressList; + if (!strcmp( inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr), "0.0.0.0" )) + Handle->AddressInfo = Handle->AddressInfo->ai_next; + if (!Handle->AddressInfo) { + if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Failed to resolve Host Name [%s:%s] (%s)", + Name, Handle->Name, Handle->HostName, Handle->PortName, gai_strerror(result) ); + freeaddrinfo( Handle->AddressList ); + Handle->AddressList = NULL; + Handle->AddressInfo = NULL; + return false; + } + // Return address if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Host name resolved [%s:%s]->[%s:%u]", Name, Handle->Name, Handle->HostName, Handle->PortName, inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr),