code: func (p *Peer) negotiateInboundProtocol() error {
  	if err := p.readRemoteVersionMsg(); err != nil {
  		return err
  	}
  
  	return p.writeLocalVersionMsg()
  }
docs: // negotiateInboundProtocol waits to receive a version message from the peer
  // then sends our version message. If the events do not occur in that order then
  // it returns an error.