diff options
author | rubidium <rubidium@openttd.org> | 2011-07-30 10:28:52 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2011-07-30 10:28:52 +0000 |
commit | 289133be148788a19a965f807e7b824c4d26f872 (patch) | |
tree | fa0820207322815661878611fb98b8b6013475d5 /src/network | |
parent | ba7611ed131b0f99dae4ca974aa1cf9c6114b6f5 (diff) | |
download | openttd-289133be148788a19a965f807e7b824c4d26f872.tar.xz |
(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
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/address.cpp | 1 | ||||
-rw-r--r-- | src/network/core/address.h | 12 | ||||
-rw-r--r-- | src/network/network_udp.cpp | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index cb93e66b3..371f53403 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -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; } diff --git a/src/network/core/address.h b/src/network/core/address.h index d2d43b4a9..9fd40eaee 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -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); diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 49b482900..3f7e8e087 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -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); |