TCP восстановление соединения после аппаратного отключения

У меня есть программа, которая постоянно записывает в сокет TCP. Я хочу убедиться, что, если соединение между клиентом и сервером будет разорвано на какое-то время, соединение можно будет восстановить.

Прямо сейчас я могу отсоединить провод, и пока функция write () зацикливается, она возвращает одну ошибку «сброс соединения одноранговым узлом», а затем значение ULLONG_MAX. Затем, как только я подключаю кабель заново, write () постоянно возвращает ошибку «сломанный канал». Я попытался закрыть и снова открыть соединение, но по-прежнему получаю ошибку «сброс соединения одноранговым узлом».

Кто-нибудь знает, как я могу либо восстановить соединение, либо сохранить его в течение определенного времени (или неопределенного времени) в первую очередь?


person Nikki    schedule 04.05.2012    source источник


Ответы (2)


Вы не можете повторно использовать файловый дескриптор здесь, вам придется снова начать с нуля - создать новый _ 1_ и вызовите _ 2_ на нем.

person Nikolai Fetissov    schedule 04.05.2012

Боюсь, вам нужно установить новое соединение, и это может быть инициировано только клиентской программой. Вам может потребоваться какой-то способ убедиться, что это тот же клиент, который повторно подключается, возможно, проверяет IP или обменивается токеном при первом подключении, поэтому вы можете выполнить какой-либо другой вид инициации в своем подключении для первого подключения и восстановления. Однако это решение требует некоторого программирования в вашей учетной записи ..

Если по какой-то причине TCP не является единственным выбором, вы можете подумать о связи UDP, поскольку там часть, которая решает, когда соединение потеряно, остается за вами. Но вам нужно позаботиться о многих других мыслях (но, поскольку вы стремитесь к утерянному и восстановленному общению, это может быть больше для ваших нужд).

person kratenko    schedule 04.05.2012