summaryrefslogtreecommitdiff
path: root/src/PeerInteractionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-08 18:27:28 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-08 18:27:28 +0000
commitf38eb15ca9720df6ce917eebfb92035a731acaeb (patch)
tree62771670da027057be4db59204bc5822c466e106 /src/PeerInteractionCommand.cc
parent9ab0ece87f0c1082e075ee4944d849c3af623bd5 (diff)
2008-02-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Only add socket to DownloadEngine's select routine when peer or localhost is unchoked and interested. This lowers CPU usage a little bit. * src/PeerInteractionCommand.cc * src/PeerAbstractCommand.{h, cc} * src/BtInteractive.h * src/DefaultBtInteractive.{h, cc}
Diffstat (limited to 'src/PeerInteractionCommand.cc')
-rw-r--r--src/PeerInteractionCommand.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc
index 160ad5e6..87e6bf52 100644
--- a/src/PeerInteractionCommand.cc
+++ b/src/PeerInteractionCommand.cc
@@ -174,17 +174,15 @@ PeerInteractionCommand::~PeerInteractionCommand() {
}
bool PeerInteractionCommand::executeInternal() {
- setReadCheckSocket(socket);
- disableWriteCheckSocket();
setUploadLimitCheck(false);
setNoCheck(false);
switch(sequence) {
case INITIATOR_SEND_HANDSHAKE:
if(!socket->isWritable(0)) {
- disableReadCheckSocket();
- setWriteCheckSocket(socket);
break;
}
+ disableWriteCheckSocket();
+ setReadCheckSocket(socket);
socket->setBlockingMode();
setTimeout(e->option->getAsInt(PREF_BT_TIMEOUT));
btInteractive->initiateHandshake();
@@ -216,19 +214,30 @@ bool PeerInteractionCommand::executeInternal() {
}
case WIRED:
btInteractive->doInteractionProcessing();
-
+ if(btInteractive->countReceivedMessageInIteration() > 0) {
+ updateKeepAlive();
+ }
+ if(peer->amInterested && !peer->peerChoking ||
+ peer->peerInterested && !peer->amChoking) {
+ if(maxDownloadSpeedLimit > 0) {
+ TransferStat stat = peerStorage->calculateStat();
+ if(maxDownloadSpeedLimit < stat.downloadSpeed) {
+ disableReadCheckSocket();
+ setNoCheck(true);
+ } else {
+ setReadCheckSocket(socket);
+ }
+ } else {
+ setReadCheckSocket(socket);
+ }
+ } else {
+ disableReadCheckSocket();
+ }
break;
}
if(btInteractive->countPendingMessage() > 0) {
setNoCheck(true);
}
- if(maxDownloadSpeedLimit > 0) {
- TransferStat stat = peerStorage->calculateStat();
- if(maxDownloadSpeedLimit < stat.downloadSpeed) {
- disableReadCheckSocket();
- setNoCheck(true);
- }
- }
e->commands.push_back(this);
return false;
}