Здравствуйте!
Столкнулись с неожиданным явлением: в программе на Qt сокет после установления соединения
перестаёт испускать сигналы. Он соединяется с tcp-видеокамерой, при этом получаются три
сигнала stateChanged, затем сигнал connected, а если теперь выдернуть кабель из камеры,
то от сокета не приходит никаких сигналов, ни одного из: disconnected, error, stateChanged, destroyed.
Это в скомпилированной Qt-4.7.2 и Qt-4.8.4.
В чём причина его молчания и можно ли как-нибудь добиться от него этих сигналов?
Пётр.
QTcpSocket молчит
Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.
Пётр.
По-видимому, для сокета это нормальное поведение, т.е. он и не должен воспринимать
прекращение поступления пакетов как ошибку. Камера подключена не прямо к компьютеру,
а через switch и их несколько. Можно попробовать запускать в отдельном потоке
waitForDisconnected(), но, м.б., есть вариант получше?
Пётр.
Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.
так и должно быть... tcp не даёт возможности определить, что один из концов отвалился... это должно делаться ручками на уровне вышестоящих протоколов или просто по таймеру, не получив ответа от сервера за определённое время...
[quote="Peter⇓"]Хочу уточнить, что после выдёргивания кабеля сокет остаётся в состоянии connection estableshed,
т.е. он не замечает, что ему перестали поступать пакеты.
так и должно быть... tcp не даёт возможности определить, что один из концов отвалился... это должно делаться ручками на уровне вышестоящих протоколов или просто по таймеру, не получив ответа от сервера за определённое время...[/quote]
Да уже сами поняли. Если бы кабель выдёргивался из разъёма компьютера, можно
было бы попытаться заметить это, система ведь его обнаруживает, но камера
подключена через switch. В нашем случае можно использовать то, что она
постоянно шлёт jpg 16 раз в секунду и про приходе каждого фиксируется время,
так что елси после прихода последнего прошло достаточно времени, можно считать,
что камера отключилась.
Пётр.