winsock - recv - проблема с сетевым подключением - PullRequest
1 голос
/ 22 ноября 2011

В моем приложении C ++ я использую функцию recv в цикле. Я хочу определить проблему с сетевым подключением, получив отрицательное значение из функции recv.

Единственное, что я вижу в своих тестах, - это когда я отключаюсь от сетевого кабеля, я могу подождать ~ минуту, пока не увижу, что мое приложение получило это отрицательное значение.

Знаете ли вы, сколько времени код C ++ знает, когда возникает проблема с сетевым подключением? Могу ли я управлять этим временем?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

Нет нормального способа сделать это на уровне только TCP. Для этого была выбрана опция SO_KEEPALIVE, но она довольно бесполезна.

Реализация пульса на уровне приложения и пометка сокета, если данные или пульс не были получены в течение указанного времени (это в значительной степени предполагает неблокирующий режим или, по крайней мере, цикл select(2) с таймаутом) .

0 голосов
/ 22 ноября 2011

Это не имеет ничего общего с кодом C ++.Он имеет все, что связано с конкретным сетевым протоколом, который вы используете.Предполагая, что это TCP, это в основном навсегда.Свободное соединение TCP не имеет связанных с ним пакетов и может никогда не обнаружить потерю соединения.

Если вы хотите обнаружить потерю определенного интерфейса, используйте функции мониторинга состояния интерфейса вашей платформы.

...