code: func (c *socks5BindConn) Handshake() (err error) {
  	c.handshakeMux.Lock()
  	defer c.handshakeMux.Unlock()
  
  	if c.handshaked {
  		return nil
  	}
  
  	c.handshaked = true
  
  	rep, err := gosocks5.ReadReply(c.Conn)
  	if err != nil {
  		return fmt.Errorf("bind: read reply %v", err)
  	}
  	if rep.Rep != gosocks5.Succeeded {
  		return fmt.Errorf("bind: peer connect failure")
  	}
  	c.raddr, err = net.ResolveTCPAddr("tcp", rep.Addr.String())
  	return
  }
docs: // Handshake waits for a peer to connect to the bind port.