Название: Проблемы с соединением по TCP/IP Отправлено: alexandr_ps от Январь 12, 2009, 14:37 Здраствуйте!
Есть клиент-серверное приложение(связка QTcpServer - QTcpSocket), при этом клиент должен отслеживать работает ли сервер. Когда связка клиент-сервер работает, и я программно закрываю приложение-сервер, у клиента вызывается сигнал ошибки error(), и я знаю, что соединение пропало. Но, когда происходит физическая потеря коннекта (тупо выдергиваю кабель из сетевой карты), ни сигнал disconnected(), ни error(), ни stateChanged() не вызываются и как узнать о том, что соединения пропало неясно. Насколько я знаю TCP/IP должен отслеживать такие вещи. В связи с этим вопрос, что не так и как поправить? P.S. SuSe Linux 10.3, Qt 4.3.2 на клиенте и на сервере Заранее спасибо! Название: Re: Проблемы с соединением по TCP/IP Отправлено: vaprele07 от Январь 12, 2009, 15:43 пингом. еще есть такая хрень "keep alive" держать соединение при разрыве... http://www.ibase.ru/devinfo/keepalive.htm
Название: Re: Проблемы с соединением по TCP/IP Отправлено: alexandr_ps от Январь 13, 2009, 17:15 Спасибо за советы! Но проблему так и не решил :(
Пингом это как? Самому постоянно присылать пакет с оповещением что сеть работает? Или ping'ом вручную от клиента сервер пинговать :)? По поводу keepalive. Вроде то что надо, но проблема в том, что изменение стандартных параметров в ОС как описано в статье ни к чему не привело. Все равно ноль реакции, состояние соединения в QTcpSocket не меняется. Проблема в ОС или Qt, но в чем - не знаю. Есть идеи? Название: Re: Проблемы с соединением по TCP/IP Отправлено: vaprele07 от Январь 14, 2009, 05:40 оказалось что кутэ не юзает SO_KEEPALIVE по этому ручками это будет выглядеть так:
Код: #include <sys/socket.h> http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ кстати если соединение через дслмодем а он в свою очередь рутером там тоже есть кипалив Название: Re: Проблемы с соединением по TCP/IP Отправлено: Rcus от Январь 14, 2009, 07:41 http://www.faqs.org/rfcs/rfc1122.html
Цитировать 4.2.3.6 TCP Keep-Alives Дальше можно и не читать. Наверно поэтому все известные мне сетевые протоколы уровня приложений реализуют свою систему keepalive через пакеты специального типаImplementors MAY include "keep-alives" in their TCP implementations, although this practice is not universally accepted. Например в сетевом протоколе игры Anarchy Online поток данных разбивается на пакеты вида [ushort type][ushort size][byte data[size]] и для поддержания соединения используется пакет [0x64][0x00] Название: Re: Проблемы с соединением по TCP/IP Отправлено: alexandr_ps от Январь 14, 2009, 09:52 Всем большое спасибо за помощь!
Буду реализовывать свой keepalive в приложении :) |