Return write errors from default pong handler

Fixes issue #86.
This commit is contained in:
Gary Burd 2015-10-15 10:14:19 -07:00
parent c66b764651
commit f71d4a996f
1 changed files with 9 additions and 4 deletions

13
conn.go
View File

@ -103,7 +103,7 @@ func (e *CloseError) Error() string {
} }
var ( 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()} errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()}
errBadWriteOpCode = errors.New("websocket: bad write message type") errBadWriteOpCode = errors.New("websocket: bad write message type")
errWriteClosed = errors.New("websocket: write closed") 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) { if n != 0 && n != len(buf) {
c.conn.Close() c.conn.Close()
} }
return err return hideTempErr(err)
} }
// NextWriter returns a writer for the next message to send. The writer's // 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) { func (c *Conn) SetPingHandler(h func(appData string) error) {
if h == nil { if h == nil {
h = func(message string) error { h = func(message string) error {
c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait))
return nil if err == ErrCloseSent {
return nil
} else if e, ok := err.(net.Error); ok && e.Temporary() {
return nil
}
return err
} }
} }
c.handlePing = h c.handlePing = h