diff --git a/netconn.go b/netconn.go index 9c70b6fec25dec5740bc5fba71cb1b1d7a3df4d2..06cbc2f55e5fa2c4e773130aafdde385b0a29b30 100644 --- a/netconn.go +++ b/netconn.go @@ -134,11 +134,19 @@ func (c *netConn) SetDeadline(t time.Time) error { } func (c *netConn) SetWriteDeadline(t time.Time) error { - c.writeTimer.Reset(t.Sub(time.Now())) + if t.IsZero() { + c.writeTimer.Stop() + } else { + c.writeTimer.Reset(t.Sub(time.Now())) + } return nil } func (c *netConn) SetReadDeadline(t time.Time) error { - c.readTimer.Reset(t.Sub(time.Now())) + if t.IsZero() { + c.readTimer.Stop() + } else { + c.readTimer.Reset(t.Sub(time.Now())) + } return nil } diff --git a/websocket_test.go b/websocket_test.go index 1dc5283b9f185b56133ce0669802fb0b19d54231..46f9c83396085d997fa3186a4f4f6a0f65848b4d 100644 --- a/websocket_test.go +++ b/websocket_test.go @@ -130,6 +130,8 @@ func TestHandshake(t *testing.T) { nc := websocket.NetConn(c) defer nc.Close() + nc.SetWriteDeadline(time.Time{}) + time.Sleep(1) nc.SetWriteDeadline(time.Now().Add(time.Second * 15)) for i := 0; i < 3; i++ { @@ -153,6 +155,8 @@ func TestHandshake(t *testing.T) { nc := websocket.NetConn(c) defer nc.Close() + nc.SetReadDeadline(time.Time{}) + time.Sleep(1) nc.SetReadDeadline(time.Now().Add(time.Second * 15)) read := func() error {