Ошибка сокета 10052 на сокете UDP - PullRequest
12 голосов
/ 19 июня 2009

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

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

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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 20 июня 2011

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

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

3 голосов
/ 18 мая 2012

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

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

myUdpClient.Ttl = 255;

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

2 голосов
/ 12 августа 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...