Форум: "Сети";
Поиск по всему сайту: 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.027 c
14-9270           Лана Розанова         2002-01-16 15:04  2002.03.04  
Привет всем!!!


3-9092            HDD                   2002-02-05 16:13  2002.03.04  
Люди добрые помогите пожалуйста


1-9156            roman001              2002-02-13 18:25  2002.03.04  
печать из Memo


1-9207            knyaz17               2002-02-12 12:01  2002.03.04  
Как вставить в Word текст из буфера обмена?


3-9067            irq                   2002-02-06 13:05  2002.03.04  
Множественные изменения