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)