From fb30712af122f689784e91a2723e2cd511ccd2d3 Mon Sep 17 00:00:00 2001
From: Toyam Cox <Vaelatern@voidlinux.org>
Date: Tue, 6 Aug 2019 03:35:49 -0400
Subject: [PATCH] netconn: Fix SetDeadline methods

Closes #111
Closes #112
---
 netconn.go        | 12 ++++++++++--
 websocket_test.go |  4 ++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/netconn.go b/netconn.go
index 9c70b6f..06cbc2f 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 1dc5283..46f9c83 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 {
-- 
GitLab