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

hai*_*yyu 5 c# sockets udp reference endpoint

如果我做这样的事情:

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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Krz*_*zyk 2

请注意,该方法是recvfromReceiveFrom WinSock 函数的托管包装器。该函数采用一个指向可选结构的指针,并在调用方分配/释放。sockaddr

考虑到这一点,我有一些理论为什么传递EndPointref而不是传递out

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