Index: src/OFHTTPClient.m ================================================================== --- src/OFHTTPClient.m +++ src/OFHTTPClient.m @@ -68,11 +68,11 @@ bool _hasContentLength, _chunked, _keepAlive, _atEndOfStream; size_t _toRead; } - initWithSocket: (OFTCPSocket*)socket; -- (void)setKeepAlive: (bool)keepAlive; +- (void)OF_setKeepAlive: (bool)keepAlive; @end @implementation OFHTTPClientResponse - initWithSocket: (OFTCPSocket*)socket { @@ -81,11 +81,11 @@ _socket = [socket retain]; return self; } -- (void)setKeepAlive: (bool)keepAlive +- (void)OF_setKeepAlive: (bool)keepAlive { _keepAlive = keepAlive; } - (void)dealloc @@ -332,11 +332,12 @@ OFString *user, *password; OFDictionary *headers = [request headers]; OFDataArray *entity = [request entity]; OFTCPSocket *socket; OFHTTPClientResponse *response; - OFString *line, *version, *redirect, *keepAlive; + OFString *line, *version, *redirect, *connectionHeader; + bool keepAlive; OFMutableDictionary *serverHeaders; OFEnumerator *keyEnumerator, *objectEnumerator; OFString *key, *object; int status; @@ -563,14 +564,27 @@ autorelease]; [response setProtocolVersionFromString: version]; [response setStatusCode: status]; [response setHeaders: serverHeaders]; - keepAlive = [serverHeaders objectForKey: @"Connection"]; - if ([version isEqual: @"1.1"] || - (keepAlive != nil && [keepAlive isEqual: @"keep-alive"])) { - [response setKeepAlive: true]; + connectionHeader = [serverHeaders objectForKey: @"Connection"]; + if ([version isEqual: @"1.1"]) { + if (connectionHeader != nil) + keepAlive = ([connectionHeader caseInsensitiveCompare: + @"close"] != OF_ORDERED_SAME); + else + keepAlive = true; + } else { + if (connectionHeader != nil) + keepAlive = ([connectionHeader caseInsensitiveCompare: + @"keep-alive"] == OF_ORDERED_SAME); + else + keepAlive = false; + } + + if (keepAlive) { + [response OF_setKeepAlive: true]; _socket = [socket retain]; _lastURL = [URL copy]; _lastWasHEAD = (method == OF_HTTP_REQUEST_METHOD_HEAD); _lastResponse = [response retain];