Russian Qt Forum

Qt => Работа с сетью => Тема начата: altVis от Апрель 25, 2008, 08:37



Название: QTcpSocket проблема с timeout.
Отправлено: altVis от Апрель 25, 2008, 08:37
День добрый!
Возникла проблема с отключением после timeout.
Обычно после 10-11 часов работы перестают приходить подтверждения от сервера.
Программа просто не оповещается никак, что соеднинение разорвано, продолжает слать данные( не получая на них ответа ack ).
/proc/sys/net/ipv4/tcp_keepalive_probes значение 9, и ровно после 9 попыток передачи пакета и не получив на него подтверждения ack, сервер меня отключает, но программа продолжает думать, что соединение всё ещё установленно.
Каждую минуту отсылается keep-alive пакет, реализованный на протоколе прикладного уровня.
Можно ли как-то среагировать на timeout, получить сигнал disconnect?
Любые предположения очень важны, т.к. сами понимаете, что проблема серъёзная.
Qt 4.3.3
Спасибо!


Название: Re: QTcpSocket проблема с timeout.
Отправлено: Вячеслав от Апрель 25, 2008, 21:43
А чуть подробнее - какая ось ?
У меня щаз на прогоне стоит платка с микроконтролером - каждые 5 секунд выдираеться статистика работы через tcp.... Неделю уже проработал ....
PS клиенты на Дебиане и форточках ......
PPS неоднократно выдирали сетевой кабель - Мат на таймаут -> дисконнект -> реконнект по таймеру -> летим дальше ;)


Название: Re: QTcpSocket проблема с timeout.
Отправлено: altVis от Апрель 25, 2008, 22:32
gentoo

Хочу зацепиться за keep alive пакеты, пробую получить размер записываемых данных, т.е. socket->write(keepalivenotification) == 0 или -1, но возвращает полный размер, может как-то возможно зацепиться вручную за ответный ack?


На крайний случай думаю ипсользовать системные вызовы, но номер дескриптора сокета возвращается, как -1 значение.