Пишу приложение, в котором работаю с сокетами напрямую.
Когда соединение теряется, пытаюсь установить его заново. Иногда получаю
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 и т.д.)