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/HttpRequestCommand.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/HttpRequestCommand.cc')
| -rw-r--r-- | src/HttpRequestCommand.cc | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/src/HttpRequestCommand.cc b/src/HttpRequestCommand.cc index d2ff2bf9..94ecb499 100644 --- a/src/HttpRequestCommand.cc +++ b/src/HttpRequestCommand.cc @@ -98,34 +98,45 @@ createHttpRequest(const SharedHandle<Request>& req, } bool HttpRequestCommand::executeInternal() { - socket->setBlockingMode(); - if(req->getProtocol() == Request::PROTO_HTTPS) { - socket->initiateSecureConnection(); - } + //socket->setBlockingMode(); + if(_httpConnection->sendBufferIsEmpty()) { + if(req->getProtocol() == Request::PROTO_HTTPS) { + socket->initiateSecureConnection(); + } - if(_segments.empty()) { - HttpRequestHandle httpRequest - (createHttpRequest(req, SharedHandle<Segment>(), - _requestGroup->getTotalLength(), e->option, - _requestGroup, - e->getCookieStorage())); - _httpConnection->sendRequest(httpRequest); - } else { - for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) { - const SegmentHandle& segment = *itr; - if(!_httpConnection->isIssued(segment)) { - HttpRequestHandle httpRequest - (createHttpRequest(req, segment, - _requestGroup->getTotalLength(), e->option, - _requestGroup, - e->getCookieStorage())); - _httpConnection->sendRequest(httpRequest); + if(_segments.empty()) { + HttpRequestHandle httpRequest + (createHttpRequest(req, SharedHandle<Segment>(), + _requestGroup->getTotalLength(), e->option, + _requestGroup, + e->getCookieStorage())); + _httpConnection->sendRequest(httpRequest); + } else { + for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) { + const SegmentHandle& segment = *itr; + if(!_httpConnection->isIssued(segment)) { + HttpRequestHandle httpRequest + (createHttpRequest(req, segment, + _requestGroup->getTotalLength(), e->option, + _requestGroup, + e->getCookieStorage())); + _httpConnection->sendRequest(httpRequest); + } } } + } else { + _httpConnection->sendPendingData(); + } + if(_httpConnection->sendBufferIsEmpty()) { + Command* command = new HttpResponseCommand(cuid, req, _requestGroup, + _httpConnection, e, socket); + e->commands.push_back(command); + return true; + } else { + setWriteCheckSocket(socket); + e->commands.push_back(this); + return false; } - Command* command = new HttpResponseCommand(cuid, req, _requestGroup, _httpConnection, e, socket); - e->commands.push_back(command); - return true; } } // namespace aria2 |
