Skip to content

Commit

Permalink
Use net.ErrClosed
Browse files Browse the repository at this point in the history
Go 1.16 has introduced net.ErrClosed, which should be returned/wrapped when an
I/O call is performed on a network connection which has already been closed.
This is useful to avoid cluttering logs with messages like "failed to close
WebSocket: already wrote close".

Closes: #286
  • Loading branch information
emersion authored and nhooyr committed Oct 13, 2023
1 parent 4ab2f54 commit e9d0881
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 3 deletions.
4 changes: 1 addition & 3 deletions close.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,13 @@ func (c *Conn) closeHandshake(code StatusCode, reason string) (err error) {
return nil
}

var errAlreadyWroteClose = errors.New("already wrote close")

func (c *Conn) writeClose(code StatusCode, reason string) error {
c.closeMu.Lock()
wroteClose := c.wroteClose
c.wroteClose = true
c.closeMu.Unlock()
if wroteClose {
return errAlreadyWroteClose
return errClosed
}

ce := CloseError{
Expand Down
9 changes: 9 additions & 0 deletions close_go113.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// +build !go1.16

package websocket

import (
"errors"
)

var errClosed = errors.New("use of closed network connection")
9 changes: 9 additions & 0 deletions close_go116.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// +build go1.16

package websocket

import (
"net"
)

var errClosed = net.ErrClosed

0 comments on commit e9d0881

Please sign in to comment.