summaryrefslogtreecommitdiff
path: root/src/DownloadEngine.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-03-05 10:35:39 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-03-05 10:35:39 +0000
commit37a5b99f33146be3d4d14c059f5dd43a2737f89f (patch)
treefb345a841184b1964abcbe53d31bb4b549a7ec62 /src/DownloadEngine.cc
parent62e1cbd0c03839e0623da962feee356cb9b633d9 (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.cc50
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;
}
}