From f85f227a7923abebf2b50c3ca4c616a38633de9a Mon Sep 17 00:00:00 2001 From: sta Date: Sun, 25 May 2014 03:00:14 +0900 Subject: [PATCH] Fix for force close in HttpConnection.cs --- websocket-sharp/Net/HttpConnection.cs | 38 +++++++++------------ websocket-sharp/Net/HttpListenerResponse.cs | 7 ++++ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/websocket-sharp/Net/HttpConnection.cs b/websocket-sharp/Net/HttpConnection.cs index ed406cb3..6ccff683 100644 --- a/websocket-sharp/Net/HttpConnection.cs +++ b/websocket-sharp/Net/HttpConnection.cs @@ -204,6 +204,7 @@ namespace WebSocketSharp.Net return; _inputStream = null; + _outputStream = null; _websocketStream = null; _stream.Dispose (); @@ -415,29 +416,24 @@ namespace WebSocketSharp.Net if (_socket == null) return; - if (_outputStream != null) { - _outputStream.Close (); - _outputStream = null; - } + if (!force) { + GetResponseStream ().Close (); - var req = _context.Request; - var res = _context.Response; + var req = _context.Request; + var res = _context.Response; + if (req.KeepAlive && + !res.CloseConnection && + req.FlushInput () && + (!_chunked || (_chunked && !res.ForceCloseChunked))) { + // Don't close. Keep working. + _reuses++; + disposeRequestBuffer (); + unbind (); + init (); + BeginReadRequest (); - force |= !req.KeepAlive; - if (!force) - force = res.Headers ["Connection"] == "close"; - - if (!force && - req.FlushInput () && - (!_chunked || (_chunked && !res.ForceCloseChunked))) { - // Don't close. Keep working. - _reuses++; - disposeRequestBuffer (); - unbind (); - init (); - BeginReadRequest (); - - return; + return; + } } close (); diff --git a/websocket-sharp/Net/HttpListenerResponse.cs b/websocket-sharp/Net/HttpListenerResponse.cs index 43f4139c..20af4f41 100644 --- a/websocket-sharp/Net/HttpListenerResponse.cs +++ b/websocket-sharp/Net/HttpListenerResponse.cs @@ -91,6 +91,12 @@ namespace WebSocketSharp.Net #region Internal Properties + internal bool CloseConnection { + get { + return _headers ["Connection"] == "close"; + } + } + internal bool ForceCloseChunked { get { return _forceCloseChunked; @@ -242,6 +248,7 @@ namespace WebSocketSharp.Net /// public WebHeaderCollection Headers { get { + checkDisposed (); return _headers; }