File tree 2 files changed +21
-4
lines changed
2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -38,7 +38,11 @@ import (
38
38
//
39
39
// A received StatusNormalClosure or StatusGoingAway close frame will be translated to
40
40
// io.EOF when reading.
41
+ //
42
+ // Furthermore, the ReadLimit is set to -1 to disable it.
41
43
func NetConn (ctx context.Context , c * Conn , msgType MessageType ) net.Conn {
44
+ c .SetReadLimit (- 1 )
45
+
42
46
nc := & netConn {
43
47
c : c ,
44
48
msgType : msgType ,
Original file line number Diff line number Diff line change @@ -69,10 +69,16 @@ func (c *Conn) CloseRead(ctx context.Context) context.Context {
69
69
// By default, the connection has a message read limit of 32768 bytes.
70
70
//
71
71
// When the limit is hit, the connection will be closed with StatusMessageTooBig.
72
+ //
73
+ // Set to -1 to disable.
72
74
func (c * Conn ) SetReadLimit (n int64 ) {
73
- // We add read one more byte than the limit in case
74
- // there is a fin frame that needs to be read.
75
- c .msgReader .limitReader .limit .Store (n + 1 )
75
+ if n >= 0 {
76
+ // We read one more byte than the limit in case
77
+ // there is a fin frame that needs to be read.
78
+ n ++
79
+ }
80
+
81
+ c .msgReader .limitReader .limit .Store (n )
76
82
}
77
83
78
84
const defaultReadLimit = 32768
@@ -450,7 +456,11 @@ func (lr *limitReader) reset(r io.Reader) {
450
456
}
451
457
452
458
func (lr * limitReader ) Read (p []byte ) (int , error ) {
453
- if lr .n <= 0 {
459
+ if lr .n < 0 {
460
+ return lr .r .Read (p )
461
+ }
462
+
463
+ if lr .n == 0 {
454
464
err := fmt .Errorf ("read limited at %v bytes" , lr .limit .Load ())
455
465
lr .c .writeError (StatusMessageTooBig , err )
456
466
return 0 , err
@@ -461,6 +471,9 @@ func (lr *limitReader) Read(p []byte) (int, error) {
461
471
}
462
472
n , err := lr .r .Read (p )
463
473
lr .n -= int64 (n )
474
+ if lr .n < 0 {
475
+ lr .n = 0
476
+ }
464
477
return n , err
465
478
}
466
479
You can’t perform that action at this time.
0 commit comments