(svn r22695) -Fix [FS#4697]: mark addresses that could not be resolved as 'do not resolve anymore' as well, instead of trying to resolve them each and every time the address is accessed

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
rubidium 13 years ago
parent ba7611ed13
commit 289133be14

@ -132,6 +132,7 @@ const sockaddr_storage *NetworkAddress::GetAddress()
* that means "don't care whether it is SOCK_STREAM or SOCK_DGRAM".
*/
this->Resolve(this->address.ss_family, SOCK_STREAM, AI_ADDRCONFIG, NULL, ResolveLoopProc);
this->resolved = true;
}
return &this->address;
}

@ -33,6 +33,7 @@ private:
char hostname[NETWORK_HOSTNAME_LENGTH]; ///< The hostname
int address_length; ///< The length of the resolved address
sockaddr_storage address; ///< The resolved address
bool resolved; ///< Whether the address has been (tried to be) resolved
/**
* Helper function to resolve something to a socket.
@ -50,7 +51,8 @@ public:
*/
NetworkAddress(struct sockaddr_storage &address, int address_length) :
address_length(address_length),
address(address)
address(address),
resolved(address_length != 0)
{
*this->hostname = '\0';
}
@ -61,7 +63,8 @@ public:
* @param address_length The length of the address.
*/
NetworkAddress(sockaddr *address, int address_length) :
address_length(address_length)
address_length(address_length),
resolved(address_length != 0)
{
*this->hostname = '\0';
memset(&this->address, 0, sizeof(this->address));
@ -75,7 +78,8 @@ public:
* @param family the address family
*/
NetworkAddress(const char *hostname = "", uint16 port = 0, int family = AF_UNSPEC) :
address_length(0)
address_length(0),
resolved(false)
{
/* Also handle IPv6 bracket enclosed hostnames */
if (StrEmpty(hostname)) hostname = "";
@ -123,7 +127,7 @@ public:
*/
bool IsResolved() const
{
return this->address_length != 0;
return this->resolved;
}
bool IsFamily(int family);

@ -491,9 +491,9 @@ static void NetworkUDPQueryServerThread(void *pntr)
/* Clear item in gamelist */
NetworkGameList *item = CallocT<NetworkGameList>(1);
item->address = *info;
info->GetAddressAsString(item->info.server_name, lastof(item->info.server_name));
strecpy(item->info.hostname, info->GetHostname(), lastof(item->info.hostname));
item->address = *info;
item->manually = info->manually;
NetworkGameListAddItemDelayed(item);

Loading…
Cancel
Save