URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5923
[ Назад ]

Исходное сообщение
"Как определить разрыв соединения."

Отправлено aljaba , 16-Ноя-06 16:11 
Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке, при просмотре netstst'ом он в состояние  Established. А мне надо превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.

Содержание

Сообщения в этом обсуждении
"Как определить разрыв соединения."
Отправлено dkrot , 16-Ноя-06 18:40 
>Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а
>клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой
>катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке,
>при просмотре netstst'ом он в состояние  Established. А мне надо
>превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.
>
Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).


"Как определить разрыв соединения."
Отправлено aljaba , 16-Ноя-06 19:06 
>Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).

Повторите для тупых.... Это опции  для оператора? Если да, то какого? можно пример.


"Как определить разрыв соединения."
Отправлено dkrot , 16-Ноя-06 20:11 
>>Если именно такой жесткий вариант как обрыв связи, то см. SO_KEEPALIVE, либо вручную производить подобные опросы. Оставшуюся часть сообщения не понял (Established->Listen).
>
>Повторите для тупых.... Это опции  для оператора? Если да, то какого?
>можно пример.
Я с точки зрения программирования (что вобщем-то и подразумевает форум).
man 2 setsockopt на предмет SO_KEEPALIVE
Также: http://www.opennet.me/openforum/vsluhforumID9/4408.html

"Как определить разрыв соединения."
Отправлено Boris Polevoy , 17-Ноя-06 10:19 
>Привет. У меня такая проблема. В клиент-серверной проге, сервер под линухом, а
>клиен под виндой. Когда в процессе пересылки данных я выдёргиваю сетевой
>катель, Клиен это дело отлавливает и выдаёт ошибку, проблема в Серваке,
>при просмотре netstst'ом он в состояние  Established. А мне надо
>превести его в состояние Listen. Как отловить разрыв соединения? Помогите плиз.
>

TCP не имеет встроенных средств определения разрыва соединения, как например, X.224. SO_KEEPALIVE не более, чем подпорка, т.к. она не позволяет реагировать на разрыв физического соединения оперативно (за секунды).

Отслеживать состояние соединения должен протокол верхнего уровня. Т.е. клиент должен постоянно опрашивать доступность сервера, сервер должен следить за активностью клиента. По истечению определенного таймаута оба могут закрывать соединения, если от удаленной стороны не было никакой активности. Причем подобные механизмы должны быть заложены в любом сетевом протоколе, иначе простая DoS атака выводит сервер из строя.


"Как определить разрыв соединения."
Отправлено aljaba , 20-Ноя-06 09:05 
Всем спасибо. Выход был найден путём посылки каждые 5 секунт контрольной метки, и если она не приходила на сервер в течении 25 сек, то соединение считалось разорвавшимся.