Quellcode durchsuchen

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

Tatsuhiro Tsujikawa vor 14 Jahren
Ursprung
Commit
8eb1de9ef8
2 geänderte Dateien mit 9 neuen und 6 gelöschten Zeilen
  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;