Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
1-9183
USAtyj
2002-02-12 18:21
2002.03.04
Про массивы и про High() (+)


1-9232
forrest1
2002-02-15 17:26
2002.03.04
Как выделить одну строку в DBGrid для SelectedRows


1-9216
DJ X
2002-02-14 16:28
2002.03.04
Подбросте пример кода


7-9314
Еремин Дмитрий
2001-11-30 09:39
2002.03.04
Вопрос по системе


1-9141
SireX
2002-02-17 16:27
2002.03.04
INI Files




   Наверх