code: func (ep *endpoint) Read(addr *tcpip.FullAddress) (buffer.View, tcpip.ControlMessages, *tcpip.Error) {
  	ep.rcvMu.Lock()
  
  	// If there's no data to read, return that read would block or that the
  	// endpoint is closed.
  	if ep.rcvList.Empty() {
  		err := tcpip.ErrWouldBlock
  		if ep.rcvClosed {
  			err = tcpip.ErrClosedForReceive
  		}
  		ep.rcvMu.Unlock()
  		return buffer.View{}, tcpip.ControlMessages{}, err
  	}
  
  	packet := ep.rcvList.Front()
  	ep.rcvList.Remove(packet)
  	ep.rcvBufSize -= packet.data.Size()
  
  	ep.rcvMu.Unlock()
  
  	if addr != nil {
  		*addr = packet.senderAddr
  	}
  
  	return packet.data.ToView(), tcpip.ControlMessages{HasTimestamp: true, Timestamp: packet.timestampNS}, nil
  }
docs: // Read implements tcpip.Endpoint.Read.