code: func (cl *Client) connBTHandshake(c *connection, ih *metainfo.Hash) (ret metainfo.Hash, ok bool, err error) {
  	res, ok, err := pp.Handshake(c.rw(), ih, cl.peerID, cl.extensionBytes)
  	if err != nil || !ok {
  		return
  	}
  	ret = res.Hash
  	c.PeerExtensionBytes = res.PeerExtensionBits
  	c.PeerID = res.PeerID
  	c.completedHandshake = time.Now()
  	return
  }
docs: // Returns !ok if handshake failed for valid reasons.