Important Update:

- SelectableCore:
  - Skip IP address "0.0.0.0" when resolving localhost
This commit is contained in:
Charl Wentzel
2017-08-28 13:17:19 +02:00
parent 4af8f529c9
commit abba077ed0

View File

@@ -575,11 +575,13 @@ bool CSelectableCore::ResolveAddress( THandle * Handle )
int result; int result;
// Check if more addresses // Check if more addresses
if (Handle->AddressInfo && Handle->AddressInfo->ai_next) if (Handle->AddressInfo)
{ Handle->AddressInfo = Handle->AddressInfo->ai_next;
// Set next address 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; 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]", if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Use next resolved Address [%s:%s]->[%s:%u]",
Name, Handle->Name, Handle->HostName, Handle->PortName, Name, Handle->Name, Handle->HostName, Handle->PortName,
inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr), inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr),
@@ -610,9 +612,20 @@ bool CSelectableCore::ResolveAddress( THandle * Handle )
return false; return false;
} }
// Select first address // Select first address, skip "0.0.0.0"
Handle->AddressInfo = Handle->AddressList; 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]", if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Host name resolved [%s:%s]->[%s:%u]",
Name, Handle->Name, Handle->HostName, Handle->PortName, Name, Handle->Name, Handle->HostName, Handle->PortName,
inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr), inet_ntoa(((struct sockaddr_in *)Handle->AddressInfo->ai_addr)->sin_addr),