diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-09-13 16:32:47 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-09-13 16:32:47 +0000 |
| commit | 495f02ebbceaf72c125d809f6ce38004b6dd580a (patch) | |
| tree | eb0fb6ddc1121aded8c92a49359c7f231ca0b90e /src/AbstractProxyRequestCommand.cc | |
| parent | 281319e8cd3ca184dc3868c3d4740c24ab2607a4 (diff) | |
2008-09-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Use non-blocking socket for TCP communication to avoid possible
blocking due to buffer full.
* src/AbstractProxyRequestCommand.cc
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/HttpConnection.cc
* src/HttpConnection.h
* src/HttpRequestCommand.cc
* src/InitiatorMSEHandshakeCommand.cc
* src/InitiatorMSEHandshakeCommand.h
* src/MSEHandshake.cc
* src/MSEHandshake.h
* src/Makefile.am
* src/PeerConnection.cc
* src/PeerConnection.h
* src/PeerInteractionCommand.cc
* src/PeerListenCommand.cc
* src/ReceiverMSEHandshakeCommand.cc
* src/ReceiverMSEHandshakeCommand.h
* src/SocketBuffer.cc
* src/SocketBuffer.h
* src/SocketCore.cc
* src/SocketCore.h
Diffstat (limited to 'src/AbstractProxyRequestCommand.cc')
| -rw-r--r-- | src/AbstractProxyRequestCommand.cc | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/AbstractProxyRequestCommand.cc b/src/AbstractProxyRequestCommand.cc index 078a55a5..c9da63be 100644 --- a/src/AbstractProxyRequestCommand.cc +++ b/src/AbstractProxyRequestCommand.cc @@ -51,7 +51,8 @@ AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid, RequestGroup* requestGroup, DownloadEngine* e, const SocketHandle& s) - :AbstractCommand(cuid, req, requestGroup, e, s) + :AbstractCommand(cuid, req, requestGroup, e, s), + httpConnection(new HttpConnection(cuid, s, e->option)) { setTimeout(e->option->getAsInt(PREF_CONNECT_TIMEOUT)); disableReadCheckSocket(); @@ -61,19 +62,25 @@ AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid, AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {} bool AbstractProxyRequestCommand::executeInternal() { - socket->setBlockingMode(); - - HttpRequestHandle httpRequest(new HttpRequest()); - httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT)); - httpRequest->setRequest(req); - httpRequest->configure(e->option); - - httpConnection.reset(new HttpConnection(cuid, socket, e->option)); - - httpConnection->sendProxyRequest(httpRequest); - - e->commands.push_back(getNextCommand()); - return true; + //socket->setBlockingMode(); + if(httpConnection->sendBufferIsEmpty()) { + HttpRequestHandle httpRequest(new HttpRequest()); + httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT)); + httpRequest->setRequest(req); + httpRequest->configure(e->option); + + httpConnection->sendProxyRequest(httpRequest); + } else { + httpConnection->sendPendingData(); + } + if(httpConnection->sendBufferIsEmpty()) { + e->commands.push_back(getNextCommand()); + return true; + } else { + setWriteCheckSocket(socket); + e->commands.push_back(this); + return false; + } } } // namespace aria2 |
