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 } }