如果我这样做:
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将读取第一个
将接收到的数据报排队放入本地网络缓冲区。
这是否意味着传递的端点仅用于存储数据包来自的主机的端点,并且根本不会影响receivefrom方法的行为?如果是,为什么需要将其传递为“ref”而不是“out”?
最佳答案
注意ReceiveFrom
方法是recvfromwinsock函数的托管包装器。此函数接受指向sockaddr
结构的指针,该结构是可选的,并在调用方端分配/释放。
考虑到这一点,我有一些理论,为什么EndPoint
被称为ref
而不是out
:
可能为了与winsock函数保持一致,EndPoint
由调用方分配,因此由ref
传递。
可能EndPoint
在某个时候被认为是一个可选参数,但它从未实现(我检查过,它必须是非空的)。
对于某些协议,可能存在通过EndPoint
参数传递的处理方向。甚至是未来的协议:-)