code: func (p *Conn) Read(b []byte) (int, error) {
  	var err error
  	p.once.Do(func() { err = p.checkPrefix() })
  	if err != nil {
  		return 0, err
  	}
  	return p.bufReader.Read(b)
  }
docs: // Read is check for the proxy protocol header when doing
  // the initial scan. If there is an error parsing the header,
  // it is returned and the socket is closed.