diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-02-08 18:27:28 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-02-08 18:27:28 +0000 |
| commit | f38eb15ca9720df6ce917eebfb92035a731acaeb (patch) | |
| tree | 62771670da027057be4db59204bc5822c466e106 /src/PeerInteractionCommand.cc | |
| parent | 9ab0ece87f0c1082e075ee4944d849c3af623bd5 (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.cc | 33 |
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; } |
