mirror of https://github.com/aria2/aria2
Don't wait for AAAA query response if A query response has been received
If we got IPv4 lookup response, we don't wait for IPv6 lookup response. This is because DNS server may drop AAAA query and we have to wait for the long time before timeout. We don't do the inverse, because, based on todays deployment of DNS server, almost all of them can respond A query just fine.pull/73/head
parent
5e245c3397
commit
8a431bfc89
|
@ -96,6 +96,10 @@ public:
|
||||||
|
|
||||||
void process(fd_set* rfdsPtr, fd_set* wfdsPtr);
|
void process(fd_set* rfdsPtr, fd_set* wfdsPtr);
|
||||||
|
|
||||||
|
int getFamily() const
|
||||||
|
{
|
||||||
|
return family_;
|
||||||
|
}
|
||||||
#ifdef HAVE_LIBCARES
|
#ifdef HAVE_LIBCARES
|
||||||
|
|
||||||
int getsock(sock_t* sockets) const;
|
int getsock(sock_t* sockets) const;
|
||||||
|
|
|
@ -157,10 +157,14 @@ int AsyncNameResolverMan::getStatus() const
|
||||||
{
|
{
|
||||||
size_t success = 0;
|
size_t success = 0;
|
||||||
size_t error = 0;
|
size_t error = 0;
|
||||||
|
bool ipv4Success = false;
|
||||||
for(size_t i = 0; i < numResolver_; ++i) {
|
for(size_t i = 0; i < numResolver_; ++i) {
|
||||||
switch(asyncNameResolver_[i]->getStatus()) {
|
switch(asyncNameResolver_[i]->getStatus()) {
|
||||||
case AsyncNameResolver::STATUS_SUCCESS:
|
case AsyncNameResolver::STATUS_SUCCESS:
|
||||||
++success;
|
++success;
|
||||||
|
if(asyncNameResolver_[i]->getFamily() == AF_INET) {
|
||||||
|
ipv4Success = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case AsyncNameResolver::STATUS_ERROR:
|
case AsyncNameResolver::STATUS_ERROR:
|
||||||
++error;
|
++error;
|
||||||
|
@ -169,7 +173,12 @@ int AsyncNameResolverMan::getStatus() const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(success == numResolver_) {
|
// If we got IPv4 lookup response, we don't wait for IPv6 lookup
|
||||||
|
// response. This is because DNS server may drop AAAA query and we
|
||||||
|
// have to wait for the long time before timeout. We don't do the
|
||||||
|
// inverse, because, based on todays deployment of DNS server,
|
||||||
|
// almost all of them can respond A query just fine.
|
||||||
|
if((success && ipv4Success) || success == numResolver_) {
|
||||||
return 1;
|
return 1;
|
||||||
} else if(error == numResolver_) {
|
} else if(error == numResolver_) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue