mirror of https://github.com/OpenTTD/OpenTTD
(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
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…
Reference in New Issue