Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отловить разрыв используемого соединения


Автор: MbIcJIuBcJIyX 20.7.2009, 19:30
Приветствую,

проблема такая, написан IRC клиент на компоненте Indy TIdIRC.

возможно ли как нибудь отловить разрыв соединения с интернетом?

Простая проверка наличия Инетернета не подходит, нужно именно отловить момент разрыва соединения, которое использует мой IRC клиент.

Так например делает mIRC, которая незамедлительно сообщает о разрыве соединения (* [10053] Software caused connection abort)

Надеюсь на Вашу помощь smile

Автор: niteo 20.7.2009, 20:12
1 Пробуй пинговать сервер, как не ответит, все, связи нет. smile
2 Так же сматри исключение EIdConnClosedGracefully, которое сигнализирует, что другая сторона умышленно закрыла соединение.
3 Посылка сообщения NOOP. Если ответ не получен в течение указанного времени, то соединение считается проблематичным и уничтожается.

вот смотри по теме http://forum.vingrad.ru/topic-232330.html

Автор: MbIcJIuBcJIyX 20.7.2009, 20:43
Главу книжки о Indy "Обнаружение разъединения" я уже прочитал smile там именно такие способы и предлагаются.

1. не дает немедленного обнаружения что соединения больше нет, именно нет, а не временно повисло.
2.не идет речь о другой стороне smile
3.см.п.1 smile

есть у меня исходники этого бота, что по ссылке, там тоже не тот метод который мне нужен.

однако mIRC как то отлавливает разрыв соединения  smile 

Автор: niteo 21.7.2009, 07:33
см http://tools.ietf.org/html/rfc1459#section-4.6.2
То есть, приходит Пинг значит гут, нет - разрыв.

Автор: MbIcJIuBcJIyX 21.7.2009, 08:54
Цитата(niteo @ 21.7.2009,  07:33)
см http://tools.ietf.org/html/rfc1459#section-4.6.2
То есть, приходит Пинг значит гут, нет - разрыв.

я уже писал что пинг не подходит, пинг может и не дойти, это не значит что соединение разорвано.

Автор: niteo 21.7.2009, 09:04
Сама специфика TCP не даст тебе "МГНОВЕННОГО" определения разрыва. На отправку и прием есть свои тайм-ауты. И меньше времени тайм-аута ты не можешь достоверно сказать, что у тебя с соединением. Посмотри как реализован др. клиент, поснифь сеть при работающей mIRC. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)