From 8eb1de9ef817ea7134a5bf922e64e217fa9993ff Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 7 Feb 2011 00:17:44 +0900 Subject: [PATCH] Get peers from DHT more frequently when the size of peer list is 0. --- src/DHTGetPeersCommand.cc | 11 ++++++----- src/DHTGetPeersCommand.h | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/DHTGetPeersCommand.cc b/src/DHTGetPeersCommand.cc index 96e2a3e5..f8225d66 100644 --- a/src/DHTGetPeersCommand.cc +++ b/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(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 diff --git a/src/DHTGetPeersCommand.h b/src/DHTGetPeersCommand.h index 252d6d8c..38b85c6a 100644 --- a/src/DHTGetPeersCommand.h +++ b/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;