Skip to content

Commit c342898

Browse files
committed
feature(SimpleW): remove _recvBuffer in HttpSession (#390)
1 parent 1654be4 commit c342898

1 file changed

Lines changed: 6 additions & 16 deletions

File tree

src/SimpleW/HttpSession.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,6 @@ public sealed class HttpSession : IDisposable {
5656
/// </summary>
5757
private bool _receiving;
5858

59-
/// <summary>
60-
/// Receive buffer.
61-
/// </summary>
62-
private byte[] _recvBuffer;
63-
6459
/// <summary>
6560
/// Parsing buffer.
6661
/// </summary>
@@ -175,7 +170,6 @@ public HttpSession(SimpleWServer server, Socket socket, ArrayPool<byte> bufferPo
175170
_bufferPool = bufferPool;
176171
_router = router;
177172

178-
_recvBuffer = _bufferPool.Rent(server.Options.ReceiveBufferSize);
179173
_parseBuffer = _bufferPool.Rent(server.Options.ReceiveBufferSize);
180174
_parseBufferCount = 0;
181175

@@ -446,8 +440,7 @@ public void MarkActivity() {
446440

447441
/// <summary>
448442
/// Main Process Loop :
449-
/// - read from Socket or SslStream to _recvBuffer
450-
/// - BlockCopy in _parseBuffer
443+
/// - read from Socket or SslStream directly into _parseBuffer
451444
/// - Parse with HttpRequestParserState
452445
/// - HttpRouter Dispatch
453446
/// - Enforce request header/body receive deadlines to mitigate slowloris
@@ -479,11 +472,14 @@ public async Task ProcessAsync() {
479472

480473
int bytesRead;
481474
try {
475+
EnsureParseBufferCapacity(Server.Options.ReceiveBufferSize);
476+
int receiveLength = Math.Min(Server.Options.ReceiveBufferSize, _parseBuffer.Length - _parseBufferCount);
477+
Memory<byte> receiveMemory = _parseBuffer.AsMemory(_parseBufferCount, receiveLength);
482478
if (IsSsl) {
483-
bytesRead = await _sslStream!.ReadAsync(_recvBuffer, 0, _recvBuffer.Length).ConfigureAwait(false);
479+
bytesRead = await _sslStream!.ReadAsync(receiveMemory).ConfigureAwait(false);
484480
}
485481
else {
486-
bytesRead = await _socket.ReceiveAsync(_recvBuffer.AsMemory(0, _recvBuffer.Length), SocketFlags.None).ConfigureAwait(false);
482+
bytesRead = await _socket.ReceiveAsync(receiveMemory, SocketFlags.None).ConfigureAwait(false);
487483
}
488484
}
489485
catch (IOException ex)
@@ -537,8 +533,6 @@ public async Task ProcessAsync() {
537533
}
538534

539535
// byte operations
540-
EnsureParseBufferCapacity(bytesRead);
541-
Buffer.BlockCopy(_recvBuffer, 0, _parseBuffer, _parseBufferCount, bytesRead);
542536
_parseBufferCount += bytesRead;
543537

544538
#endregion read
@@ -1140,10 +1134,6 @@ public void Dispose() {
11401134
try { _sslStream?.Dispose(); } catch { }
11411135
_sslStream = null;
11421136

1143-
if (_recvBuffer != null) {
1144-
_bufferPool.Return(_recvBuffer);
1145-
_recvBuffer = null!;
1146-
}
11471137

11481138
if (_parseBuffer != null) {
11491139
_bufferPool.Return(_parseBuffer);

0 commit comments

Comments
 (0)