From e9d08816010996a14241f008ac097c5621bd1f30 Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Wed, 19 May 2021 23:52:23 +0200
Subject: [PATCH] Use net.ErrClosed

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: https://github.com/nhooyr/websocket/issues/286
---
 close.go       | 4 +---
 close_go113.go | 9 +++++++++
 close_go116.go | 9 +++++++++
 3 files changed, 19 insertions(+), 3 deletions(-)
 create mode 100644 close_go113.go
 create mode 100644 close_go116.go

diff --git a/close.go b/close.go
index eab49a8..1e13ca7 100644
--- a/close.go
+++ b/close.go
@@ -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{
diff --git a/close_go113.go b/close_go113.go
new file mode 100644
index 0000000..4f586dc
--- /dev/null
+++ b/close_go113.go
@@ -0,0 +1,9 @@
+// +build !go1.16
+
+package websocket
+
+import (
+	"errors"
+)
+
+var errClosed = errors.New("use of closed network connection")
diff --git a/close_go116.go b/close_go116.go
new file mode 100644
index 0000000..0a6e5f1
--- /dev/null
+++ b/close_go116.go
@@ -0,0 +1,9 @@
+// +build go1.16
+
+package websocket
+
+import (
+	"net"
+)
+
+var errClosed = net.ErrClosed
-- 
GitLab