From f71d4a996ff3687f2051ff11aca8b570ef785b2b Mon Sep 17 00:00:00 2001 From: Gary Burd Date: Thu, 15 Oct 2015 10:14:19 -0700 Subject: [PATCH] Return write errors from default pong handler Fixes issue #86. --- conn.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/conn.go b/conn.go index 1708303..e8b6b3e 100644 --- a/conn.go +++ b/conn.go @@ -103,7 +103,7 @@ func (e *CloseError) Error() string { } var ( - errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true} + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} errBadWriteOpCode = errors.New("websocket: bad write message type") errWriteClosed = errors.New("websocket: write closed") @@ -300,7 +300,7 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er if n != 0 && n != len(buf) { c.conn.Close() } - return err + return hideTempErr(err) } // NextWriter returns a writer for the next message to send. The writer's @@ -794,8 +794,13 @@ func (c *Conn) SetReadLimit(limit int64) { func (c *Conn) SetPingHandler(h func(appData string) error) { if h == nil { h = func(message string) error { - c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) - return nil + err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + if err == ErrCloseSent { + return nil + } else if e, ok := err.(net.Error); ok && e.Temporary() { + return nil + } + return err } } c.handlePing = h