summaryrefslogtreecommitdiff
path: root/src/UDPTrackerClient.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-01-19 11:24:57 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-01-19 11:24:57 +0900
commit8b93b12488d12820470e14f0ebbb656728f7df83 (patch)
tree0d1f76f36d1606ea94b623e222430b7d7fe862e7 /src/UDPTrackerClient.cc
parent7b2e797fdfa27794b0f4a96bba0c42b5e67a6050 (diff)
Reduce delay in tracker request
We eliminated 1 second delay between completion of name resolution for tracker request and time when it is actually issued. We also elimited 1 second delay after last torrent download exists and it is told to DHTInteractionCommand.
Diffstat (limited to 'src/UDPTrackerClient.cc')
-rw-r--r--src/UDPTrackerClient.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/UDPTrackerClient.cc b/src/UDPTrackerClient.cc
index 21e5c48f..cffbf1c9 100644
--- a/src/UDPTrackerClient.cc
+++ b/src/UDPTrackerClient.cc
@@ -132,7 +132,8 @@ struct CollectAddrPortMatch {
};
} // namespace
-int UDPTrackerClient::receiveReply(const unsigned char* data, size_t length,
+int UDPTrackerClient::receiveReply(std::shared_ptr<UDPTrackerRequest>& recvReq,
+ const unsigned char* data, size_t length,
const std::string& remoteAddr,
uint16_t remotePort, const Timer& now)
{
@@ -167,6 +168,9 @@ int UDPTrackerClient::receiveReply(const unsigned char* data, size_t length,
CollectAddrPortMatch(reqs, remoteAddr, remotePort)),
connectRequests_.end());
pendingRequests_.insert(pendingRequests_.begin(), reqs.begin(), reqs.end());
+
+ recvReq = std::move(req);
+
break;
}
case UDPT_ACT_ANNOUNCE: {
@@ -209,6 +213,9 @@ int UDPTrackerClient::receiveReply(const unsigned char* data, size_t length,
getUDPTrackerEventStr(req->event),
util::toHex(req->infohash).c_str(), req->reply->interval,
req->reply->leechers, req->reply->seeders, numPeers));
+
+ recvReq = std::move(req);
+
break;
}
case UDPT_ACT_ERROR: {
@@ -236,6 +243,9 @@ int UDPTrackerClient::receiveReply(const unsigned char* data, size_t length,
if (req->action == UDPT_ACT_CONNECT) {
failConnect(req->remoteAddr, req->remotePort, UDPT_ERR_TRACKER);
}
+
+ recvReq = std::move(req);
+
break;
}
case UDPT_ACT_SCRAPE: