diff --git a/conn.go b/conn.go index 7d48b8aa1de1c131e919f79f094660969c16a217..df3a4044e37799441ed218d94ce31312a8238b79 100644 --- a/conn.go +++ b/conn.go @@ -236,6 +236,10 @@ func (c *Conn) readTillMsg(ctx context.Context) (header, error) { if h.opcode.controlOp() { err = c.handleControl(ctx, h) if err != nil { + // Pass through CloseErrors when receiving a close frame. + if h.opcode == opClose && CloseStatus(err) != -1 { + return header{}, err + } return header{}, fmt.Errorf("failed to handle control frame %v: %w", h.opcode, err) } continue