فهرست منبع

Get peers from DHT more frequently when the size of peer list is 0.

Tatsuhiro Tsujikawa 14 سال پیش
والد
کامیت
8eb1de9ef8
2فایلهای تغییر یافته به همراه9 افزوده شده و 6 حذف شده
  1. 6 5
      src/DHTGetPeersCommand.cc
  2. 3 1
      src/DHTGetPeersCommand.h

+ 6 - 5
src/DHTGetPeersCommand.cc

@@ -75,12 +75,13 @@ bool DHTGetPeersCommand::execute()
   if(btRuntime_->isHalt()) {
     return true;
   }
+  time_t elapsed = lastGetPeerTime_.difference(global::wallclock);
   if(!task_ &&
-     ((numRetry_ > 0 &&
-       lastGetPeerTime_.difference(global::wallclock) >= (time_t)numRetry_*5) ||
-      lastGetPeerTime_.difference(global::wallclock) >= GET_PEER_INTERVAL ||
-      (btRuntime_->lessThanMinPeers() &&
-       lastGetPeerTime_.difference(global::wallclock) >= GET_PEER_MIN_INTERVAL
+     ((numRetry_ > 0 && elapsed >= static_cast<time_t>(numRetry_*5)) ||
+      elapsed >= GET_PEER_INTERVAL ||
+      (((btRuntime_->lessThanMinPeers() && elapsed >= GET_PEER_INTERVAL_LOW) ||
+        (btRuntime_->getConnections() == 0 &&
+         elapsed >= GET_PEER_INTERVAL_ZERO))
        && !requestGroup_->downloadFinished()))) {
     A2_LOG_DEBUG(fmt("Issuing PeerLookup for infoHash=%s",
                      bittorrent::getInfoHashString

+ 3 - 1
src/DHTGetPeersCommand.h

@@ -54,7 +54,9 @@ class DHTGetPeersCommand:public Command {
 private:
   static const time_t GET_PEER_INTERVAL = (15*60);
 
-  static const time_t GET_PEER_MIN_INTERVAL = (5*60);
+  static const time_t GET_PEER_INTERVAL_LOW = (5*60);
+
+  static const time_t GET_PEER_INTERVAL_ZERO = 60;
 
   static const size_t MAX_RETRIES = 10;