diff --git a/client/client.go b/client/client.go
index 70bce4b24d95df77a6387320da2bc91d11815bf8..9758cbde8a60aee5717add48f1e525df6dc13a04 100644
--- a/client/client.go
+++ b/client/client.go
@@ -419,21 +419,25 @@ func (c *Client) readUDPWriteTCP() {
 			c.error("readUDPWriteTCP: Write err from %v to %v: %v", conn.LocalAddr(), conn.RemoteAddr(), err)
 			cancelled := cancellableSleep(c.ctx, reconnectTime)
 			if !cancelled {
-				config := c.obfs4Conns[0].config
+				conn, err = c.getUsableConnection()
+				if err != nil {
+					return
+				}
+				config := conn.config
 				c.connectObfs4(&config, 20)
 			}
 		}
 	}
 }
 
-func (c *Client) getUsableConnection() (net.Conn, error) {
+func (c *Client) getUsableConnection() (*Obfs4Conn, error) {
 	c.outLock.Lock()
 	defer c.outLock.Unlock()
 
 	if len(c.obfs4Conns) == 0 {
 		return nil, errors.New("no usable connection")
 	} else {
-		return c.obfs4Conns[0], nil
+		return &c.obfs4Conns[0], nil
 	}
 }