code: func (p *conn) Read(b []byte) (int, error) {
  	var err error
  	p.initOnce.Do(func() { err = p.checkPrefix() })
  	if err != nil {
  		return 0, err
  	}
  	if p.connBuf != nil {
  		n := copy(b, p.connBuf)
  		p.connBuf = p.connBuf[n:]
  		if len(p.connBuf) == 0 {
  			p.connBuf = nil
  		}
  		if len(b) == n {
  			return n, nil
  		}
  		readN, err := p.Conn.Read(b[n:])
  		return readN + n, err
  	}
  	return p.Conn.Read(b)
  }
docs: // Read checks 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.