@@ -679,11 +679,11 @@ { OFURL *URL = [_request URL]; OFTCPSocket *sock; /* Can we reuse the last socket? */ - if (_client->_socket != nil && + if (_client->_socket != nil && ![_client->_socket isAtEndOfStream] && [[_client->_lastURL scheme] isEqual: [URL scheme]] && [[_client->_lastURL host] isEqual: [URL host]] && [_client->_lastURL port] == [URL port]) { /* * Set _socket to nil, so that in case of an error it won't be @@ -694,11 +694,12 @@ _client->_socket = nil; [_client->_lastURL release]; _client->_lastURL = nil; - if (!_client->_lastWasHEAD) { + if (!_client->_lastWasHEAD && + ![_client->_lastResponse isAtEndOfStream]) { /* Throw away content that has not been read yet */ char *buffer = [self allocMemoryWithSize: 512]; [_client->_lastResponse asyncReadIntoBuffer: buffer @@ -933,21 +934,10 @@ /* Content-Length */ if (!_chunked) { size_t ret; - if (_toRead == 0) { - _atEndOfStream = true; - - if (!_keepAlive) { - [_socket release]; - _socket = nil; - } - - return 0; - } - if (length > _toRead) length = (size_t)_toRead; ret = [_socket readIntoBuffer: buffer length: length]; @@ -954,10 +944,19 @@ if (ret > length) @throw [OFOutOfRangeException exception]; _toRead -= ret; + + if (_toRead == 0) { + _atEndOfStream = true; + + if (!_keepAlive) { + [_socket release]; + _socket = nil; + } + } return ret; } /* Chunked */