На самом деле, кажется, что UdpClient
не работает, когда дело доходит до тайм-аута. Я попытался написать сервер с потоком, содержащим только Receive, который получил данные и добавил их в очередь. Я делал подобные вещи годами с помощью TCP. Ожидается, что цикл блокируется на приеме до тех пор, пока не поступит сообщение от запрашивающей стороны. Однако, несмотря на установку времени ожидания на бесконечность:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
истечение времени ожидания через 3 минуты.
Единственный обходной путь, который я нашел, - перехватить исключение тайм-аута и продолжить цикл. Это скрывает ошибку Microsoft, но не может ответить на фундаментальный вопрос, почему это происходит.