internal void Close(bool force) { if (_socket != null) { GetResponseStream()?.Close(); _responseStream = null; } if (_socket != null) { force |= !_context.Request.KeepAlive; if (!force) { force = (_context.Response.Headers[HttpKnownHeaderNames.Connection] == HttpHeaderStrings.Close); } if (!force && _context.Request.FlushInput()) { if (_chunked && _context.Response.ForceCloseChunked == false) { // Don't close. Keep working. _reuses++; Unbind(); Init(); BeginReadRequest(); return; } _reuses++; Unbind(); Init(); BeginReadRequest(); return; } Socket s = _socket; _socket = null; try { s?.Shutdown(SocketShutdown.Both); } catch { } finally { s?.Close(); } Unbind(); RemoveConnection(); return; } }
private void Init() { _contextBound = false; _requestStream = null; _responseStream = null; _prefix = null; _chunked = false; _memoryStream = new MemoryStream(); _position = 0; _inputState = InputState.RequestLine; _lineState = LineState.None; _context = new HttpListenerContext(this); }
public HttpResponseStream GetResponseStream() { if (_responseStream == null) { HttpListener?listener = _context._listener; if (listener == null) { return(new HttpResponseStream(_stream, _context.Response, true)); } _responseStream = new HttpResponseStream(_stream, _context.Response, listener.IgnoreWriteExceptions); } return(_responseStream); }