File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -38,7 +38,11 @@ import (
3838//
3939// A received StatusNormalClosure or StatusGoingAway close frame will be translated to
4040// io.EOF when reading.
41+ //
42+ // Furthermore, the ReadLimit is set to -1 to disable it.
4143func NetConn (ctx context.Context , c * Conn , msgType MessageType ) net.Conn {
44+ c .SetReadLimit (- 1 )
45+
4246 nc := & netConn {
4347 c : c ,
4448 msgType : msgType ,
Original file line number Diff line number Diff line change @@ -74,10 +74,16 @@ func (c *Conn) CloseRead(ctx context.Context) context.Context {
7474// By default, the connection has a message read limit of 32768 bytes.
7575//
7676// When the limit is hit, the connection will be closed with StatusMessageTooBig.
77+ //
78+ // Set to -1 to disable.
7779func (c * Conn ) SetReadLimit (n int64 ) {
78- // We add read one more byte than the limit in case
79- // there is a fin frame that needs to be read.
80- c .msgReader .limitReader .limit .Store (n + 1 )
80+ if n >= 0 {
81+ // We read one more byte than the limit in case
82+ // there is a fin frame that needs to be read.
83+ n ++
84+ }
85+
86+ c .msgReader .limitReader .limit .Store (n )
8187}
8288
8389const defaultReadLimit = 32768
@@ -455,7 +461,11 @@ func (lr *limitReader) reset(r io.Reader) {
455461}
456462
457463func (lr * limitReader ) Read (p []byte ) (int , error ) {
458- if lr .n <= 0 {
464+ if lr .n < 0 {
465+ return lr .r .Read (p )
466+ }
467+
468+ if lr .n == 0 {
459469 err := fmt .Errorf ("read limited at %v bytes" , lr .limit .Load ())
460470 lr .c .writeError (StatusMessageTooBig , err )
461471 return 0 , err
@@ -466,6 +476,9 @@ func (lr *limitReader) Read(p []byte) (int, error) {
466476 }
467477 n , err := lr .r .Read (p )
468478 lr .n -= int64 (n )
479+ if lr .n < 0 {
480+ lr .n = 0
481+ }
469482 return n , err
470483}
471484
You can’t perform that action at this time.
0 commit comments