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 (
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