Skip to content

Commit 695e909

Browse files
authored
Remove hideTempErr to allow downstream users to check for errors like net.ErrClosed (#894)
Since this change https://github.com/gorilla/websocket/pull/840/files#diff-4f427d2b022907c552328e63f137561f6de92396d7a6e8f6c2ea1bcf0db52654L190-R197 we can no longer determinate if the errors coming from ReadMessage() are net.ErrClosed for example Hardcoding the error message is not great option because it may vary from OS to OS and system locale
1 parent d293aa5 commit 695e909

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

conn.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,6 @@ func newMaskKey() [4]byte {
192192
return k
193193
}
194194

195-
func hideTempErr(err error) error {
196-
if e, ok := err.(net.Error); ok {
197-
err = &netError{msg: e.Error(), timeout: e.Timeout()}
198-
}
199-
return err
200-
}
201-
202195
func isControl(frameType int) bool {
203196
return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage
204197
}
@@ -364,7 +357,6 @@ func (c *Conn) RemoteAddr() net.Addr {
364357
// Write methods
365358

366359
func (c *Conn) writeFatal(err error) error {
367-
err = hideTempErr(err)
368360
c.writeErrMu.Lock()
369361
if c.writeErr == nil {
370362
c.writeErr = err
@@ -1033,7 +1025,7 @@ func (c *Conn) NextReader() (messageType int, r io.Reader, err error) {
10331025
for c.readErr == nil {
10341026
frameType, err := c.advanceFrame()
10351027
if err != nil {
1036-
c.readErr = hideTempErr(err)
1028+
c.readErr = err
10371029
break
10381030
}
10391031

@@ -1073,7 +1065,7 @@ func (r *messageReader) Read(b []byte) (int, error) {
10731065
b = b[:c.readRemaining]
10741066
}
10751067
n, err := c.br.Read(b)
1076-
c.readErr = hideTempErr(err)
1068+
c.readErr = err
10771069
if c.isServer {
10781070
c.readMaskPos = maskBytes(c.readMaskKey, c.readMaskPos, b[:n])
10791071
}
@@ -1096,7 +1088,7 @@ func (r *messageReader) Read(b []byte) (int, error) {
10961088
frameType, err := c.advanceFrame()
10971089
switch {
10981090
case err != nil:
1099-
c.readErr = hideTempErr(err)
1091+
c.readErr = err
11001092
case frameType == TextMessage || frameType == BinaryMessage:
11011093
c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader")
11021094
}

conn_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,3 +814,25 @@ func TestFormatMessageType(t *testing.T) {
814814
t.Error("failed to format message type")
815815
}
816816
}
817+
818+
type fakeNetClosedReader struct {
819+
}
820+
821+
func (r fakeNetClosedReader) Read([]byte) (int, error) {
822+
return 0, net.ErrClosed
823+
}
824+
825+
func TestConnectionClosed(t *testing.T) {
826+
var b1, b2 bytes.Buffer
827+
828+
client := newTestConn(fakeNetClosedReader{}, &b1, false)
829+
server := newTestConn(fakeNetClosedReader{}, &b2, true)
830+
831+
if _, _, err := server.NextReader(); !errors.Is(err, net.ErrClosed) {
832+
t.Fatalf("server expects a net.ErrClosed error, %v returned", err)
833+
}
834+
835+
if _, _, err := client.NextReader(); !errors.Is(err, net.ErrClosed) {
836+
t.Fatalf("client expects a net.ErrClosed error, %v returned", err)
837+
}
838+
}

0 commit comments

Comments
 (0)