Ошибка сокета 10052 на сокете UDP

У нас есть настольное приложение .NET 2.0, которое отправляет и получает сеть пакетов через UDP.

Несколько пользователей сообщили о случайной ошибке сокета 10052, которая происходит когда код вызывает socket.BeginReceiveFrom на UDP-сокете.

Что это значит?

Официальная документация MS для сокета об ошибке 10052 говорит - quote: "WSAENETRESET (10052) Сетевое соединение отключено на reset. был нарушен из-за активности активности, обнаруживающей отказ, в то время как продолжалась операция. Он также может быть возвращен setsockopt, если делается попытка установить SO_KEEPALIVE на соединение, которое уже не удалось ".

Это просто не имеет смысла для UDP-сокета, поскольку UDP является протокол без установления соединения.

Я знаю, что еще один код ошибки 10054 в связи с сокетами UDP означает, что получено сообщение ICMP "Port Unreachable", и я интересно, может ли 10052 сопоставить другое сообщение ICMP?

Я искал это в течение нескольких месяцев, читал сетевые книги и т.д., но не могу найти что-нибудь. Пожалуйста, помогите - что означает ошибка сокета 10052 на гнезде UDP?

Заранее спасибо

Ответ 1

См. http://msdn.microsoft.com/en-us/library/ms740120%28v=vs.85%29.aspx, в котором описывается функция recvfrom. В нем говорится о WSAENETRESET (который является ошибкой winsock 10052):

Для сокета датаграммы эта ошибка указывает на то, что время жизни истекло.

Ответ 2

Убедитесь, что значение TTL достаточно велико при отправке дейтаграмм UDP.

Если вы используете класс UdpClient. Затем перед отправкой дейтаграммы используйте следующее:

myUdpClient.Ttl = 255;

Примечание: 255 - максимальное значение для TTL. Существует проблема с сетью, если этого значения недостаточно.

Ответ 3

WSAE NET RESET предполагает, что это происходит из-за RESET самого сетевого интерфейса. Ваша программа сидит там, привязанная к UDP-порту, поэтому в некотором смысле она подключена, но к сетевому интерфейсу, а не к удаленному узлу.

Попробуйте запустить свою программу, доведя ее до того момента, когда будет запущен этот вызов BeginReceiveFrom, затем отключите ваш сетевой адаптер в диспетчере устройств и снова включите его. Или, используя Wi-Fi, снимите и восстановите соединение с WAP. Это может произойти, просто отсоединив кабель Ethernet к вашему компьютеру, так как последние версии Windows по умолчанию убивают все сокеты, подключенные через этот сетевой адаптер, когда это происходит.

Это объясняет редкие сообщения о проблемах с поля. Вероятно, это происходит только тогда, когда на аппаратном уровне возникает локальная сетевая ошибка.