diff options
| author | Nagi5Yeq <wu@x-nagi.com> | 2021-02-05 16:10:32 +0800 |
|---|---|---|
| committer | Nagi5Yeq <wu@x-nagi.com> | 2021-02-05 16:10:32 +0800 |
| commit | 32ebcdbc8290474b63d78d357847eebea8cb9ad9 (patch) | |
| tree | 26fdd9b44ff48bfa0588cbfc9b2d4ee7cdbfeca7 /src/AsyncNameResolverMan.cc | |
| parent | 31d9d4dbed319a3c1a0a493c1e48ed7d20621762 (diff) | |
add allow-ipv6-only option
Diffstat (limited to 'src/AsyncNameResolverMan.cc')
| -rw-r--r-- | src/AsyncNameResolverMan.cc | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/AsyncNameResolverMan.cc b/src/AsyncNameResolverMan.cc index be073561..d20296da 100644 --- a/src/AsyncNameResolverMan.cc +++ b/src/AsyncNameResolverMan.cc @@ -49,7 +49,11 @@ namespace aria2 { AsyncNameResolverMan::AsyncNameResolverMan() - : numResolver_(0), resolverCheck_(0), ipv4_(true), ipv6_(true) + : numResolver_(0), + resolverCheck_(0), + ipv4_(true), + ipv6_(true), + allowIpv6Only_(false) { } @@ -167,15 +171,25 @@ int AsyncNameResolverMan::getStatus() const break; } } - // If we got a IPv4 lookup response, we don't wait for a IPv6 lookup - // response. This is because DNS servers may drop AAAA queries and we - // have to wait for a long time before timeout. We don't do the - // inverse, because, based on today's deployment of DNS servers, - // almost all of them can respond to A queries just fine. - if ((success && ipv4Success) || success == numResolver_) { - return 1; + if (allowIpv6Only_ == true) { + // The waiting process of IPv4 and IPv6 lookup will eventually timeout + // the resolution of IPv6-only domains, so just report success regardless of + // which address family the result belongs to in such case. + if (success > 0) { + return 1; + } + } + else { + // If we got a IPv4 lookup response, we don't wait for a IPv6 lookup + // response. This is because DNS servers may drop AAAA queries and we + // have to wait for a long time before timeout. We don't do the + // inverse, because, based on today's deployment of DNS servers, + // almost all of them can respond to A queries just fine. + if ((success && ipv4Success) || success == numResolver_) { + return 1; + } } - else if (error == numResolver_) { + if (error == numResolver_) { return -1; } else { @@ -222,6 +236,8 @@ void configureAsyncNameResolverMan(AsyncNameResolverMan* asyncNameResolverMan, if (!net::getIPv6AddrConfigured() || option->getAsBool(PREF_DISABLE_IPV6)) { asyncNameResolverMan->setIPv6(false); } + asyncNameResolverMan->setAllowIpv6Only( + option->getAsBool(PERF_ASYNC_DNS_ALLOW_IPV6ONLY)); } } // namespace aria2 |
