Сокет Был предоставлен недопустимый аргумент

Я использую сокет для отправки пакетов UDP в своем приложении на фиксированный IP-адрес и порт. Сокет создается с помощью Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp), и я держу этот экземпляр на протяжении всего времени жизни приложения. Каждый пакет UDP передается с использованием Socket.Send(byte[] buffer).

Приложение работает уже несколько недель и неожиданно отправляет SocketException с сообщением о том, что введен неверный аргумент. Перезапуск приложения эффективно решает проблему, но мне интересно узнать, знает ли кто-нибудь, что вызывает это, и есть ли какая-либо стратегия восстановления, которой я могу следовать.


person MRT    schedule 22.04.2013    source источник
comment
Вы должны более внимательно посмотреть на исходные коды ошибок SocketException. Найдите их в соответствующих заголовочных файлах Windows SDK. Они более информативны, чем сообщение.   -  person Anton Tykhyy    schedule 22.04.2013
comment
Хорошо, я воспроизвел один сценарий с исключением. Если я передаю UDP-пакеты и отключаю сетевое соединение для компьютера, возникает SocketException (10055), за которым следует SocketException (10022) для каждой отправки после этого.   -  person MRT    schedule 22.04.2013
comment
Если вы отключились, вам, вероятно, следует заново создать объект сокета.   -  person Peter Ritchie    schedule 22.04.2013
comment
Действительно, похоже, это работает для проблемы сбоя сети. Если сокет не подключен, я закрываю его, воссоздаю и делаю новый Connect. Если я подключу сеть, она снова начнет отправлять.   -  person MRT    schedule 22.04.2013
comment
@PeterRitchie: Опубликуйте ответ со своим комментарием, и я отмечу его как окончательный ответ.   -  person MRT    schedule 30.04.2013


Ответы (1)


Если вы отключились, лучше заново создать объект сокета.

person Peter Ritchie    schedule 30.04.2013