diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-03-05 10:35:39 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-03-05 10:35:39 +0000 |
| commit | 37a5b99f33146be3d4d14c059f5dd43a2737f89f (patch) | |
| tree | fb345a841184b1964abcbe53d31bb4b549a7ec62 /src/DownloadEngine.cc | |
| parent | 62e1cbd0c03839e0623da962feee356cb9b633d9 (diff) | |
2008-03-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
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.
Diffstat (limited to 'src/DownloadEngine.cc')
| -rw-r--r-- | src/DownloadEngine.cc | 50 |
1 files changed, 25 insertions, 25 deletions
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; - } + 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 } +#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; } } |
