AshBlade
@AshBlade
Просто хочу быть счастливым

Как правильно переподключаться сокетом?

Пишу приложение, в котором работаю с сокетами напрямую.
Когда соединение теряется, пытаюсь установить его заново. Иногда получаю IOException, иногда SocketException. В таких случаях вызываю Connect и все вроде хорошо. Но порой получаю InvalidOperationException, в котором говорится, что нельзя переподключаться закрытым сокетом (не Dispose) на один и тот же адрес.
Вот сообщение об ошибке.
System.InvalidOperationException: Once the socket has been disconnected, you can only reconnect again asynchronously, and only to a different EndPoint.  BeginConnect must be called on a thread that won't exit until the operation has been completed.


Сам вопрос: как правильно выстроить подобную политику переподключения сокетами?

Единственное, что пришло в голову: правильно - каждый раз создавать новый сокет и вызывать Connect уже на нем, а прошлые разы мне просто везло, либо я не замечал проблем.

Замечание: повторно подключаться надо по одному и тому же адресу (IP, порт, DNS и т.д.)
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
Griboks
@Griboks Куратор тега C#
Всё правильно думаете. Рекомендую каждый раз создавать отдельный сокет на каждое соединение. Иначе вам придётся проводить полную реинициализацию, что немного быстрее, но слишком геморно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы