LinuxForum.Fans
Тема

QTcpSocket молчит

Автор: Peter 5 сообщений 1647 просмотров
#325450

Здравствуйте!

Столкнулись с неожиданным явлением: в программе на Qt сокет после установления соединения
перестаёт испускать сигналы. Он соединяется с tcp-видеокамерой, при этом получаются три
сигнала stateChanged, затем сигнал connected, а если теперь выдернуть кабель из камеры,
то от сокета не приходит никаких сигналов, ни одного из: disconnected, error, stateChanged, destroyed.
Это в скомпилированной Qt-4.7.2 и Qt-4.8.4.
В чём причина его молчания и можно ли как-нибудь добиться от него этих сигналов?

Пётр.

#325456

Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.

Пётр.

#325463

По-видимому, для сокета это нормальное поведение, т.е. он и не должен воспринимать
прекращение поступления пакетов как ошибку. Камера подключена не прямо к компьютеру,
а через switch и их несколько. Можно попробовать запускать в отдельном потоке
waitForDisconnected(), но, м.б., есть вариант получше?

Пётр.

#325465
"Peter⇓" написал:
Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.

так и должно быть... tcp не даёт возможности определить, что один из концов отвалился... это должно делаться ручками на уровне вышестоящих протоколов или просто по таймеру, не получив ответа от сервера за определённое время...

#325502
Fat-Zer написал:
[quote="Peter⇓"]Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.

так и должно быть... tcp не даёт возможности определить, что один из концов отвалился... это должно делаться ручками на уровне вышестоящих протоколов или просто по таймеру, не получив ответа от сервера за определённое время...[/quote]
Да уже сами поняли. Если бы кабель выдёргивался из разъёма компьютера, можно
было бы попытаться заметить это, система ведь его обнаруживает, но камера
подключена через switch. В нашем случае можно использовать то, что она
постоянно шлёт jpg 16 раз в секунду и про приходе каждого фиксируется время,
так что елси после прихода последнего прошло достаточно времени, можно считать,
что камера отключилась.

Пётр.

Войдите или зарегистрируйтесь, чтобы ответить.