diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-03-31 00:57:33 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-03-31 18:02:45 +0900 |
| commit | f4a098754429019c356f6480238ff5cf941ed391 (patch) | |
| tree | 7fa5afe019475d3c2c1e4fe09ffaee9ff36ce6b4 /src/AsyncNameResolverMan.cc | |
| parent | 56fac58b4d05e1fc97ac37195c7a8cbacb08fb07 (diff) | |
Check non-loopback (and non-linklocak for IPv6) address is configured
Issue A record query only when non-loopback IPv4 address is
configured. Likewise, issue AAA record query only when non-loopback
and non-linklocak IPv6 address is configured.
Diffstat (limited to 'src/AsyncNameResolverMan.cc')
| -rw-r--r-- | src/AsyncNameResolverMan.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/AsyncNameResolverMan.cc b/src/AsyncNameResolverMan.cc index 53f5daac..4e66cce1 100644 --- a/src/AsyncNameResolverMan.cc +++ b/src/AsyncNameResolverMan.cc @@ -69,14 +69,16 @@ void AsyncNameResolverMan::startAsync(const std::string& hostname, Command* command) { numResolver_ = 0; - if(ipv4_) { - startAsyncFamily(hostname, AF_INET, e, command); - ++numResolver_; - } + // Set IPv6 resolver first, so that we can push IPv6 address in + // front of IPv6 address in getResolvedAddress(). if(ipv6_) { startAsyncFamily(hostname, AF_INET6, e, command); ++numResolver_; } + if(ipv4_) { + startAsyncFamily(hostname, AF_INET, e, command); + ++numResolver_; + } A2_LOG_INFO(fmt(MSG_RESOLVING_HOSTNAME, command->getCuid(), hostname.c_str())); } @@ -150,11 +152,13 @@ void AsyncNameResolverMan::disableNameResolverCheck(size_t index, int AsyncNameResolverMan::getStatus() const { + size_t success = 0; size_t error = 0; for(size_t i = 0; i < numResolver_; ++i) { switch(asyncNameResolver_[i]->getStatus()) { case AsyncNameResolver::STATUS_SUCCESS: - return 1; + ++success; + break; case AsyncNameResolver::STATUS_ERROR: ++error; break; @@ -162,7 +166,13 @@ int AsyncNameResolverMan::getStatus() const break; } } - return error == numResolver_ ? -1 : 0; + if(success == numResolver_) { + return 1; + } else if(error == numResolver_) { + return -1; + } else { + return 0; + } } const std::string& AsyncNameResolverMan::getLastError() const |
