From 573d08c4bcc549f5a5177ac58a486ea2b813fba7 Mon Sep 17 00:00:00 2001 From: Anmol Sethi Date: Fri, 13 Oct 2023 18:28:04 -0700 Subject: [PATCH] close: Implement CloseNow Closes #384 --- close.go | 9 +++++++++ conn.go | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/close.go b/close.go index 1e13ca73..c685d88a 100644 --- a/close.go +++ b/close.go @@ -102,6 +102,15 @@ func (c *Conn) Close(code StatusCode, reason string) error { return c.closeHandshake(code, reason) } +// CloseNow closes the WebSocket connection without attempting a close handshake. +// Use When you do not want the overhead of the close handshake. +func (c *Conn) CloseNow() (err error) { + defer errd.Wrap(&err, "failed to close WebSocket") + + c.close(nil) + return c.closeErr +} + func (c *Conn) closeHandshake(code StatusCode, reason string) (err error) { defer errd.Wrap(&err, "failed to close WebSocket") diff --git a/conn.go b/conn.go index 78eaad82..ce4bc9c4 100644 --- a/conn.go +++ b/conn.go @@ -147,6 +147,12 @@ func (c *Conn) close(err error) { if c.isClosed() { return } + if err == nil { + err = c.rwc.Close() + if err == nil { + err = errors.New("WebSocket closed abnormally") + } + } c.setCloseErrLocked(err) close(c.closed) runtime.SetFinalizer(c, nil)