code: func (c *Conn) Handshake() error {
  	c.handshakeMutex.Lock()
  	defer c.handshakeMutex.Unlock()
  	if err := c.handshakeErr; err != nil {
  		return err
  	}
  	if c.handshakeComplete {
  		return nil
  	}
  
  	if c.isClient {
  		c.handshakeErr = c.clientHandshake()
  	} else {
  		c.handshakeErr = c.serverHandshake()
  	}
  	return c.handshakeErr
  }
docs: // Handshake runs the client or server handshake
  // protocol if it has not yet been run.
  // Most uses of this package need not call Handshake
  // explicitly: the first Read or Write will call it automatically.