Ver código fonte

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.
Tatsuhiro Tsujikawa 17 anos atrás
pai
commit
37a5b99f33
3 arquivos alterados com 36 adições e 26 exclusões
  1. 10 0
      ChangeLog
  2. 25 25
      src/DownloadEngine.cc
  3. 1 1
      src/option_processing.cc

+ 10 - 0
ChangeLog

@@ -1,3 +1,13 @@
+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.
+
 2008-03-04  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Merged Ross's mingw patch.

+ 25 - 25
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;
   }
 }

+ 1 - 1
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");