@@ -255,9 +255,10 @@ type Conn struct {
255
255
writeErrMu sync.Mutex
256
256
writeErr error
257
257
258
- enableWriteCompression bool
259
- compressionLevel int
260
- newCompressionWriter func (io.WriteCloser , int ) io.WriteCloser
258
+ allowReadControlMessages bool
259
+ enableWriteCompression bool
260
+ compressionLevel int
261
+ newCompressionWriter func (io.WriteCloser , int ) io.WriteCloser
261
262
262
263
// Read fields
263
264
reader io.ReadCloser // the current reader returned to the application
@@ -355,7 +356,6 @@ func (c *Conn) RemoteAddr() net.Addr {
355
356
}
356
357
357
358
// Write methods
358
-
359
359
func (c * Conn ) writeFatal (err error ) error {
360
360
err = hideTempErr (err )
361
361
c .writeErrMu .Lock ()
@@ -991,6 +991,9 @@ func (c *Conn) NextReader() (messageType int, r io.Reader, err error) {
991
991
}
992
992
return frameType , c .reader , nil
993
993
}
994
+ if c .allowReadControlMessages {
995
+ return frameType , nil , c .readErr
996
+ }
994
997
}
995
998
996
999
// Applications that do handle the error returned from this method spin in
@@ -1077,6 +1080,12 @@ func (c *Conn) SetReadDeadline(t time.Time) error {
1077
1080
return c .conn .SetReadDeadline (t )
1078
1081
}
1079
1082
1083
+ // AllowReadControlMessages allows the ReadMessage method to return ControlMessage
1084
+ // without having to wait for TextMessage And BinaryMessage
1085
+ func (c * Conn ) AllowReadControlMessages () {
1086
+ c .allowReadControlMessages = true
1087
+ }
1088
+
1080
1089
// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a
1081
1090
// message exceeds the limit, the connection sends a close message to the peer
1082
1091
// and returns ErrReadLimit to the application.
0 commit comments