Skip to content

Commit 879d2c0

Browse files
authored
Merge pull request #1 from iluozhiqiang/feature/async_read
add allowReadControlMessages field, support non-blocking read
2 parents e8629af + da244de commit 879d2c0

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

conn.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,10 @@ type Conn struct {
255255
writeErrMu sync.Mutex
256256
writeErr error
257257

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
261262

262263
// Read fields
263264
reader io.ReadCloser // the current reader returned to the application
@@ -355,7 +356,6 @@ func (c *Conn) RemoteAddr() net.Addr {
355356
}
356357

357358
// Write methods
358-
359359
func (c *Conn) writeFatal(err error) error {
360360
err = hideTempErr(err)
361361
c.writeErrMu.Lock()
@@ -991,6 +991,9 @@ func (c *Conn) NextReader() (messageType int, r io.Reader, err error) {
991991
}
992992
return frameType, c.reader, nil
993993
}
994+
if c.allowReadControlMessages {
995+
return frameType, nil, c.readErr
996+
}
994997
}
995998

996999
// Applications that do handle the error returned from this method spin in
@@ -1077,6 +1080,12 @@ func (c *Conn) SetReadDeadline(t time.Time) error {
10771080
return c.conn.SetReadDeadline(t)
10781081
}
10791082

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+
10801089
// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a
10811090
// message exceeds the limit, the connection sends a close message to the peer
10821091
// and returns ErrReadLimit to the application.

0 commit comments

Comments
 (0)