Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке, при просмотре netstst'ом он в состояние Established. А мне надо превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.
>Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а
>клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой
>катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке,
>при просмотре netstst'ом он в состояние Established. А мне надо
>превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.
>
Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).
>Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).Повторите для тупых.... Это опции для оператора? Если да, то какого? можно пример.
>>Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).
>
>Повторите для тупых.... Это опции для оператора? Если да, то какого?
>можно пример.
Я с точки зрения программирования (что вобщем-то и подразумевает форум).
man 2 setsockopt на предмет SO_KEEPALIVE
Также: http://www.opennet.me/openforum/vsluhforumID9/4408.html
>Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а
>клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой
>катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке,
>при просмотре netstst'ом он в состояние Established. А мне надо
>превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.
>TCP не имеет встроенных средств определения разрыва соединения, как например, X.224. SO_KEEPALIVE не более, чем подпорка, т.к. она не позволяет реагировать на разрыв физического соединения оперативно (за секунды).
Отслеживать состояние соединения должен протокол верхнего уровня. Т.е. клиент должен постоянно опрашивать доступность сервера, сервер должен следить за активностью клиента. По истечению определенного таймаута оба могут закрывать соединения, если от удаленной стороны не было никакой активности. Причем подобные механизмы должны быть заложены в любом сетевом протоколе, иначе простая DoS атака выводит сервер из строя.
Всем спасибо. Выход был найден путём посылки каждые 5 секунт контрольной метки, и если она не приходила на сервер в течении 25 сек, то соединение считалось разорвавшимся.