diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-01-06 13:02:10 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-01-06 13:02:10 +0000 |
| commit | e237a6ebdaf507aec25116819a63bee32f985e60 (patch) | |
| tree | e2b8c64eb8b4cd85c41931e25f56318c71a54cb3 /src | |
| parent | f6a3ca0b1e9b4dc02d109fd5c7cc8269d372e2bc (diff) | |
2010-01-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Pool connection if _contentEncodingDecoder is used and server
supports persistent connection.
* src/HttpDownloadCommand.cc
Diffstat (limited to 'src')
| -rw-r--r-- | src/HttpDownloadCommand.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/HttpDownloadCommand.cc b/src/HttpDownloadCommand.cc index 7826e2dd..fe29e9d2 100644 --- a/src/HttpDownloadCommand.cc +++ b/src/HttpDownloadCommand.cc @@ -47,6 +47,7 @@ #include "HttpHeader.h" #include "Range.h" #include "DownloadContext.h" +#include "Decoder.h" namespace aria2 { @@ -82,9 +83,21 @@ bool HttpDownloadCommand::prepareForNextSegment() { } else { if(req->isPipeliningEnabled() || (req->isKeepAliveEnabled() && - ((!_transferEncodingDecoder.isNull() && - _requestGroup->downloadFinished()) || - _fileEntry->getLastOffset() == _segments.front()->getPositionToWrite()))) { + ( + ((!_transferEncodingDecoder.isNull() && + _transferEncodingDecoder->finished()) || + (!_contentEncodingDecoder.isNull() && + _contentEncodingDecoder->finished())) || + _fileEntry->getLastOffset() == + _segments.front()->getPositionToWrite() + ) + ) + ) { + // TODO What if server sends EOF when _contentEncodingDecoder is + // used and server didn't send Connection: close? We end up to + // pool terminated socket. In HTTP/1.1, keep-alive is default, + // so closing connection without Connection: close header means + // that server is broken or not configured properly. e->poolSocket(req, isProxyDefined(), socket); } // The request was sent assuming that server supported pipelining, but |
