From 5eb14664876e904aec3cb43514407320785bdc8f Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Thu, 19 May 2016 00:13:33 +0100 Subject: [PATCH] Fast-path response header connection check --- src/Microsoft.AspNetCore.Server.Kestrel/Http/Frame.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Http/Frame.cs index 467b841fd6..0c5deb9937 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Http/Frame.cs @@ -670,14 +670,17 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http var responseHeaders = _frameHeaders.ResponseHeaders; responseHeaders.SetReadOnly(); + var hasConnection = responseHeaders.HasConnection; + var end = SocketOutput.ProducingStart(); - if (_keepAlive) + if (_keepAlive && hasConnection) { foreach (var connectionValue in responseHeaders.HeaderConnection) { if (connectionValue.IndexOf("close", StringComparison.OrdinalIgnoreCase) != -1) { _keepAlive = false; + break; } } } @@ -716,11 +719,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http } } - if (!_keepAlive && !responseHeaders.HasConnection && _httpVersion != HttpVersionType.Http10) + if (!_keepAlive && !hasConnection && _httpVersion != HttpVersionType.Http10) { responseHeaders.SetRawConnection("close", _bytesConnectionClose); } - else if (_keepAlive && !responseHeaders.HasConnection && _httpVersion == HttpVersionType.Http10) + else if (_keepAlive && !hasConnection && _httpVersion == HttpVersionType.Http10) { responseHeaders.SetRawConnection("keep-alive", _bytesConnectionKeepAlive); }