socket receive ejemplo cliente async c# sockets reference udp endpoint

receive - socket tcp c#



Inseguridad sobre pasar EndPoint a Socket.ReceiveFrom() (1)

Si hago algo como esto:

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);

¿Recibirá el método ReceiveFrom solo paquetes desde el punto final que se está pasando? La documentación establece lo siguiente:

Con los protocolos sin conexión, ReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local.

¿Significa eso que el EndPoint pasado solo se usa para almacenar el EndPoint del host del que proviene el paquete y no afecta en absoluto el comportamiento del método ReceiveFrom? Si es así, ¿por qué necesita ser pasado como "ref" en lugar de "out"?


Tenga en cuenta que el método ReceiveFrom es un contenedor administrado para la función recvfrom WinSock. Esta función toma un puntero a la estructura sockaddr que es opcional y asignado / desasignado en el lado de la persona que llama.

Con esto en mente, tengo algunas teorías sobre por qué el EndPoint pasa como ref y no como out :

  1. Quizás para la coherencia con la función WinSock, el llamador asigna el EndPoint y, por lo tanto, lo pasa por ref .
  2. Tal vez EndPoint fue considerado en algún momento como un parámetro opcional, pero esto nunca se implementó (revisé, debe ser no nulo).
  3. Quizás para algunos protocolos, hay direcciones de procesamiento que pasan a través del parámetro EndPoint . Tal vez incluso futuros protocolos :-)