diff --git a/ChangeLog b/ChangeLog index b54b70b7..c3543472 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-03-05 Tatsuhiro Tsujikawa + + Fixed the bug that aria2 only uses first dns server in resolv.conf + when compiled with async DNS support. + * src/DownloadEngine.cc + * src/option_processing.cc: Lengthened DNS timeout to 30. I think old + value '10' will be a little bit short when some DNS servers are + offline and several DNS servers are tried. It should be configured + by command-line option. + 2008-03-04 Tatsuhiro Tsujikawa Merged Ross's mingw patch. diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index 03e01590..43f52ce2 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -166,6 +166,18 @@ void DownloadEngine::waitData() { memcpy(&rfds, &rfdset, sizeof(fd_set)); memcpy(&wfds, &wfdset, sizeof(fd_set)); +#ifdef ENABLE_ASYNC_DNS + for(NameResolverEntries::iterator itr = nameResolverEntries.begin(); + itr != nameResolverEntries.end(); ++itr) { + NameResolverEntry& entry = *itr; + int32_t fd = entry.nameResolver->getFds(&rfds, &wfds); + // TODO force error if fd == 0 + if(fdmax < fd) { + fdmax = fd; + } + } +#endif // ENABLE_ASYNC_DNS + tv.tv_sec = noWait ? 0 : 1; tv.tv_usec = 0; retval = select(fdmax+1, &rfds, &wfds, NULL, &tv); @@ -178,38 +190,28 @@ void DownloadEngine::waitData() { entry.command->setStatusActive(); } } -#ifdef ENABLE_ASYNC_DNS - for(NameResolverEntries::iterator itr = nameResolverEntries.begin(); - itr != nameResolverEntries.end(); ++itr) { - NameResolverEntry& entry = *itr; - entry.nameResolver->process(&rfds, &wfds); - switch(entry.nameResolver->getStatus()) { - case NameResolver::STATUS_SUCCESS: - case NameResolver::STATUS_ERROR: - entry.command->setStatusActive(); - break; - default: - break; - } - } -#endif // ENABLE_ASYNC_DNS } +#ifdef ENABLE_ASYNC_DNS + for(NameResolverEntries::iterator itr = nameResolverEntries.begin(); + itr != nameResolverEntries.end(); ++itr) { + NameResolverEntry& entry = *itr; + entry.nameResolver->process(&rfds, &wfds); + switch(entry.nameResolver->getStatus()) { + case NameResolver::STATUS_SUCCESS: + case NameResolver::STATUS_ERROR: + entry.command->setStatusActive(); + break; + default: + break; + } + } +#endif // ENABLE_ASYNC_DNS } void DownloadEngine::updateFdSet() { fdmax = 0; FD_ZERO(&rfdset); FD_ZERO(&wfdset); -#ifdef ENABLE_ASYNC_DNS - for(NameResolverEntries::iterator itr = nameResolverEntries.begin(); - itr != nameResolverEntries.end(); ++itr) { - NameResolverEntry& entry = *itr; - int32_t fd = entry.nameResolver->getFds(&rfdset, &wfdset); - if(fdmax < fd) { - fdmax = fd; - } - } -#endif // ENABLE_ASYNC_DNS for(SocketEntries::iterator itr = socketEntries.begin(); itr != socketEntries.end(); ++itr) { SocketEntry& entry = *itr; @@ -332,7 +334,6 @@ bool DownloadEngine::addNameResolverCheck(const NameResolverHandle& resolver, entry); if(itr == nameResolverEntries.end()) { nameResolverEntries.push_back(entry); - updateFdSet(); return true; } else { return false; @@ -349,7 +350,6 @@ bool DownloadEngine::deleteNameResolverCheck(const NameResolverHandle& resolver, return false; } else { nameResolverEntries.erase(itr); - updateFdSet(); return true; } } diff --git a/src/option_processing.cc b/src/option_processing.cc index e1e639d8..296a7cdd 100644 --- a/src/option_processing.cc +++ b/src/option_processing.cc @@ -96,7 +96,7 @@ Option* option_processing(int argc, char* const argv[]) ); op->put(PREF_RETRY_WAIT, "5"); op->put(PREF_TIMEOUT, "60"); - op->put(PREF_DNS_TIMEOUT, "10"); + op->put(PREF_DNS_TIMEOUT, "30"); op->put(PREF_PEER_CONNECTION_TIMEOUT, "20"); op->put(PREF_BT_TIMEOUT, "180"); op->put(PREF_BT_REQUEST_TIMEOUT, "60");