@@ -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