code: func (e *endpoint) Read(addr *tcpip.FullAddress) (buffer.View, tcpip.ControlMessages, *tcpip.Error) {
  	e.rcvMu.Lock()
  
  	if e.rcvList.Empty() {
  		err := tcpip.ErrWouldBlock
  		if e.rcvClosed {
  			err = tcpip.ErrClosedForReceive
  		}
  		e.rcvMu.Unlock()
  		return buffer.View{}, tcpip.ControlMessages{}, err
  	}
  
  	p := e.rcvList.Front()
  	e.rcvList.Remove(p)
  	e.rcvBufSize -= p.data.Size()
  
  	e.rcvMu.Unlock()
  
  	if addr != nil {
  		*addr = p.senderAddress
  	}
  
  	return p.data.ToView(), tcpip.ControlMessages{HasTimestamp: true, Timestamp: p.timestamp}, nil
  }
docs: // Read reads data from the endpoint. This method does not block if
  // there is no data pending.