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 {