Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Вниз

Ошибка на сокете 


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?




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.034 c
14-9286           Alx2                  2002-01-18 08:09  2002.03.04  
Святая вода, или тема на злобу дня


1-9126            Olivka                2002-02-16 21:29  2002.03.04  
Окна: одно за другим ?


4-9326            bob5                  2002-01-04 06:06  2002.03.04  
Hint Ы


6-9247            Snake2000             2001-12-11 12:41  2002.03.04  
Срочно!!! - Post-запрос


1-9100            Cossys                2002-02-11 18:14  2002.03.04  
Алгоритм, может кто-нибудь подобное решал...