Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > как узнать о разрыве связи с узлом?


Автор: GolIy 26.9.2008, 09:03
Привет.
Есть тсп соединение. Если кто-то, либо клиент, либо серв завершает работу нормальным путём (closesocket, или просто тупо прога закрывается, ось сама что нада отправит другой стороне для дисконекта), то на другой стороне это мы сразу узнаем при вызове какойлибо функции ввода-вывода для сокета. Но если на узле мы закончили работу некорректно ? Например, выключили питание у компа ;) Возможно ли, мгновенно на другой стороне узнать об этом ? Все функции работы с соком есесно не будут давать никакой информации о дисконекте, ибо никаких пакетов которые бы это сказали не было. Есть опция у сокета SO_KEEPALIVE, но она мне не подходит - если её включить она только через 2 часа молчания включит свои алгоритмы для опреления статуса связи, и только черзе 11мин. 15 сек. скажет что связи нет. Можно менять переменную 2 часа - я ставил 3 секунды )) но в любой случае нужно ждать 11м15сек. Меня это не устраивает. Мну нужно мгновенно узнать об этом. 
Собственно, вопрос реально ли сразу узнать о дисконекте средствами socket api ? Или тут без ICMP не обойтись ?

Автор: HappyLife 26.9.2008, 09:27
Нужно использовать бесконечный пинг-понг. Если пинг понг остановился, то связь разорвалась.

Автор: Rickert 26.9.2008, 10:47
GolIy, с опред. интервалом (в одну секунду - классика), отправляем пакет, если на него не пришёл опред. ответ - связь разорвана. Эдакий KEEPALIVE ручной сборки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)