diff --git a/client/client.go b/client/client.go
index cb061c8322e8696a6dd65ee6db7137a71640af99..70bce4b24d95df77a6387320da2bc91d11815bf8 100644
--- a/client/client.go
+++ b/client/client.go
@@ -417,9 +417,11 @@ func (c *Client) readUDPWriteTCP() {
 		_, err = conn.Write(tcpBuffer)
 		if err != nil {
 			c.error("readUDPWriteTCP: Write err from %v to %v: %v", conn.LocalAddr(), conn.RemoteAddr(), err)
-			time.Sleep(reconnectTime)
-			config := c.obfs4Conns[0].config
-			c.connectObfs4(&config, 20)
+			cancelled := cancellableSleep(c.ctx, reconnectTime)
+			if !cancelled {
+				config := c.obfs4Conns[0].config
+				c.connectObfs4(&config, 20)
+			}
 		}
 	}
 }