Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.04;
Скачать: CL | DM;

Вниз

Ошибка на сокете   Найти похожие ветки 

 
Leviathan ©   (2001-12-10 22:29) [0]

Привет! Скажем, произошла на сокете ошибка, было три клиента, один нелегально отпал (завис, например). Как это обработать? OnDisconnect, естественно, не происходит. И будет ли продолжать за сокетом числиться этот номер коннекшна?


 
Digitman ©   (2001-12-11 13:27) [1]

При использовании логики, "прошитой" в TServerSocket такая ситуация не может быть определена сервером, и кл.соединение будет считаться активным неопределенное время.
А вообще такие ситуации могут спокойно обрабатываться, если программировать гнездовые соединения на уровне API. При этом можно будет задать зн-е таймаута, в теч.которого клиент обязан "подать голос" и по истечении которого (при возникновении события, связанного с превышением тайм-аута) сервер просто принудительно откулючает клиента как "зависшего", не подающего "признаки жизни"


 
Polevi ©   (2001-12-11 15:01) [2]

Придется хранить для каждого сокета значение LastActive, периодически опрашивать все сокеты и отключать те, для которых Now-LastActive>SomeInterval


 
Digitman ©   (2001-12-11 15:43) [3]

>Leviathan
Логику, упомянутую <Polevi>, принято определять термином "Keep Alive" (по-русски примерно интерпретируемую как механизм периодического извещения взаимодействующих друг с другом процессов о том , что каждый из них "жив" и способен реагировать на последующие сообщения партнера по коннекту). Программная реализация механизма "Keep Alive" на уровне приложений, конечно же, усложняет протокол информационного взаимодействия в распределенных системах, но в ряде случаев оправдан (ICQ!!!). Программная реализация того же механизма на уровне Winsock тоже существует, но не может быть задействована при использовании "жестко прошитых" классов TServerSocket и TClientSocket.


 
Leviathan ©   (2001-12-11 19:51) [4]

Большое спасибо всем за помощь!

Polevi:
Я правильно понял что умерший клиент продолжает числиться как здоровый коннекшн, и только после его отключения список коннекшнов "сдвинется вниз"? Если да, то почему бы вместо периодического опроса не проводить такой опрос в OnError? Возможно это?


 
Digitman ©   (2001-12-13 07:53) [5]

OnError в такой ситуации никогда не возникнет.


 
Polevi ©   (2001-12-14 15:22) [6]

>продолжает числиться как здоровый коннекшн
раз конекшн "здоровый" - откуда OnError?



Страницы: 1 вся ветка

Текущий архив: 2002.03.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-9125
Геральт
2002-02-15 22:14
2002.03.04
Вывод различной информации


1-9242
hooky-mars
2002-02-12 21:18
2002.03.04
Реестр и левые данные


4-9332
Пастор
2002-01-04 17:07
2002.03.04
Как узнать запущенно ли интересующее меня приложение ?


1-9186
BlankAlex
2002-02-11 10:58
2002.03.04
Custom Grid


3-9093
harismatik
2002-02-06 16:35
2002.03.04
Шестнадцатиричные значения в базе