code: func (c *managedConnImpl) Read(b []byte) (n int, err error) {
  	conn, err := c.rawConn()
  	if err != nil {
  		return 0, err
  	}
  
  	if c.options.ReadTimeout > 0 {
  		deadline := c.options.getCurrentTime().Add(c.options.ReadTimeout)
  		_ = conn.SetReadDeadline(deadline)
  	}
  	n, err = conn.Read(b)
  	if err != nil {
  		var localAddr string
  		if conn.LocalAddr() != nil {
  			localAddr = conn.LocalAddr().String()
  		} else {
  			localAddr = "(nil)"
  		}
  
  		var remoteAddr string
  		if conn.RemoteAddr() != nil {
  			remoteAddr = conn.RemoteAddr().String()
  		} else {
  			remoteAddr = "(nil)"
  		}
  		err = errors.Wrapf(err, "Read error from host: %s <-> %s", localAddr, remoteAddr)
  	}
  	return
  }
docs: // See net.Conn for documentation