关于将EndPoint传递给Socket.ReceiveFrom()的不确定性

如果我做这样的事情:

byte[] buffer = new byte[1024]; Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint remote = new IPEndPoint(IPAddress.Parse("12.34.56.78"), 1337); sock.ReceiveFrom(buffer, ref remote); 

ReceiveFrom方法是否只接收来自正在传递的端点的数据包? 文档说明如下:

使用无连接协议,ReceiveFrom将读取接收到本地网络缓冲区的第一个入队数据报。

这是否意味着传递的EndPoint仅用于存储数据包来自的主机的EndPoint,并且根本不影响ReceiveFrom方法的行为? 如果是这样,为什么需要将其作为“ref”而不是“out”传递?

请注意, ReceiveFrom方法是recvfrom WinSock函数的托管包装器。 此函数接受一个指向sockaddr结构的指针,该结构是可选的,并在调用者端分配/解除分配。

考虑到这一点,我有一些理论为什么EndPoint作为ref传递而不是:

  1. 也许为了与WinSock函数保持一致, EndPoint由调用者分配,因此通过ref传递。
  2. 也许EndPoint在某些时候被认为是一个可选参数,但这从未实现过(我检查过,它必须是非空的)。
  3. 对于某些协议,可能存在通过EndPoint参数传递的处理方向。 也许甚至未来的协议:-)