From e237a6ebdaf507aec25116819a63bee32f985e60 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 6 Jan 2010 13:02:10 +0000 Subject: 2010-01-06 Tatsuhiro Tsujikawa Pool connection if _contentEncodingDecoder is used and server supports persistent connection. * src/HttpDownloadCommand.cc --- src/HttpDownloadCommand.cc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/HttpDownloadCommand.cc') 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 -- cgit