En realidad, parece que UdpClient
se rompe cuando se trata de tiempos de espera. Intenté escribir un servidor con un hilo que solo contenía un Receive que obtenía los datos y los agregaba a una cola. He hecho este tipo de cosas durante años con TCP. La expectativa es que el bucle bloquee en la recepción hasta que llegue un mensaje de un solicitante. Sin embargo, a pesar de marcar el tiempo de espera hasta el infinito:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
la toma el tiempo de espera después de unos 3 minutos.
La única solución que encontré fue atrapar la excepción de tiempo de espera y continuar el ciclo. Esto oculta el error de Microsoft pero no responde la pregunta fundamental de por qué está sucediendo esto.
Gracias por la respuesta. – Jack
¡Esto fue hace mucho tiempo! Eso se ve bien ahora. WaitOne también devuelve un resultado que puede usar para determinar si se agotó el tiempo de espera. – weston