c# udp multicast

C#UdpClient-Propiedad de Ttl contra SetSocketOption



multicast (1)

Establecer la propiedad UdpClient.Ttl es equivalente a establecer UdpClient.Client.Ttl . Termina llamando:

UdpClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, value)

(o IPv6 dependiendo de la familia de direcciones).

Así que supongo que debe llamar directamente a SetSocketOption si desea establecer SocketOptionName.MulticastTimeToLive ya que esto es diferente de SocketOptionName.IpTimeToLive .

He usado la programación de socket extensamente en C ++, así que entiendo cuáles son todas las opciones de socket, etc. Ahora estoy incursionando en C #, y me he encontrado con un problema que me gustaría obtener una explicación.

Estoy usando la clase UdpClient en una pequeña aplicación que inició otro desarrollador. Estoy enviando paquetes a una dirección de multidifusión, así que tengo que configurar el TTL para los paquetes. Miro la documentación aquí:

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.aspx

Y hay una propiedad TTL que se puede establecer o obtener. La ayuda en la propiedad dice que el ttl "predeterminado" es 128. Si obtengo la propiedad, es 128, y después de establecer la propiedad y volver a obtenerla, puedo verificar que el valor ha cambiado, sin embargo, cuando envío un paquete, su TTL real se establece en 1.

Como sé más sobre redes que el tipo que inició la aplicación, probé esta línea de código ( udpRecvClient es el nombre del UdpClient):

updRecvClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 64);

Esto hace que mis paquetes enviados tengan un TTL correcto de 64, pero leer la propiedad Ttl aún devuelve un valor predeterminado sin modificar de 128.

Entonces, ¿qué da? ¿Estoy mal leyendo la propiedad Ttl? Me gustaría saber cuál es el problema para poder evitarlo cuando utilice otras clases de C #. Por ahora, solo voy a usar SetSocketOption para todo e ignoro las propiedades ''útiles''.

Tenga en cuenta que updRecvClient.Client.Ttl también es una propiedad, y tampoco cambia el TTL actual en paquetes salientes.