| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Отловить разрыв используемого соединения |
| Автор: MbIcJIuBcJIyX 20.7.2009, 19:30 |
| Приветствую, проблема такая, написан IRC клиент на компоненте Indy TIdIRC. возможно ли как нибудь отловить разрыв соединения с интернетом? Простая проверка наличия Инетернета не подходит, нужно именно отловить момент разрыва соединения, которое использует мой IRC клиент. Так например делает mIRC, которая незамедлительно сообщает о разрыве соединения (* [10053] Software caused connection abort) Надеюсь на Вашу помощь |
| Автор: niteo 20.7.2009, 20:12 |
| 1 Пробуй пинговать сервер, как не ответит, все, связи нет. 2 Так же сматри исключение EIdConnClosedGracefully, которое сигнализирует, что другая сторона умышленно закрыла соединение. 3 Посылка сообщения NOOP. Если ответ не получен в течение указанного времени, то соединение считается проблематичным и уничтожается. вот смотри по теме http://forum.vingrad.ru/topic-232330.html |
| Автор: MbIcJIuBcJIyX 20.7.2009, 20:43 |
| Главу книжки о Indy "Обнаружение разъединения" я уже прочитал 1. не дает немедленного обнаружения что соединения больше нет, именно нет, а не временно повисло. 2.не идет речь о другой стороне 3.см.п.1 есть у меня исходники этого бота, что по ссылке, там тоже не тот метод который мне нужен. однако mIRC как то отлавливает разрыв соединения |
| Автор: 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, 09:04 |
| Сама специфика TCP не даст тебе "МГНОВЕННОГО" определения разрыва. На отправку и прием есть свои тайм-ауты. И меньше времени тайм-аута ты не можешь достоверно сказать, что у тебя с соединением. Посмотри как реализован др. клиент, поснифь сеть при работающей mIRC. |