コード例 #1
0
        private bool flushHeaders(bool closing)
        {
            using (var buff = new MemoryStream()) {
                var headers = _response.WriteHeadersTo(buff);
                var start   = buff.Position;
                var len     = buff.Length - start;
                if (len > 32768)
                {
                    return(false);
                }

                if (!_response.SendChunked && _response.ContentLength64 != _body.Length)
                {
                    return(false);
                }


                _write(buff.GetBuffer(), (int)start, (int)len);


                _response.CloseConnection = headers["Connection"] == "close";
                _response.HeadersSent     = true;
            }

            return(true);
        }
コード例 #2
0
        private void flush(bool closing)
        {
            if (!_response.HeadersSent)
            {
                using (var headers = new MemoryStream()) {
                    _response.WriteHeadersTo(headers, closing);
                    var start = headers.Position;
                    _write(headers.GetBuffer(), (int)start, (int)(headers.Length - start));
                }

                _response.HeadersSent = true;

                _chunked   = _response.SendChunked;
                _writeBody = _chunked ? _writeChunked : _write;
            }

            flushBody(closing);
            if (closing && _chunked)
            {
                var last = getChunkSizeBytes(0, true);
                _write(last, 0, last.Length);
            }
        }