Russian Qt Forum
Ноябрь 23, 2024, 01:02
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
"Зависание" программы при выходе после попытки tcp подключения без сети
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: "Зависание" программы при выходе после попытки tcp подключения без сети (Прочитано 11651 раз)
altVis
Гость
"Зависание" программы при выходе после попытки tcp подключения без сети
«
:
Февраль 27, 2008, 22:09 »
Вечер добрый.
Проблема существует только при указании символьного адреса хоста сокету. ( видимо из-за поиска днс )
Действия:
- отключается кабель
- из программы пытаюсь подключиться к хосту ==> программа "не зависает"
- пытаюсь закрыть программу ==> программа "зависает"
Протокол tcp. qt 4.3.3
Не могу разобраться, что происходит. Деструкторы не вызываются, программа просто намертво "зависает".
Может есть какие-нибудь предположения?
«
Последнее редактирование: Февраль 27, 2008, 22:15 от altVis
»
Записан
ритт
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #1 :
Февраль 28, 2008, 02:02 »
попробуй тот же код на 4.3.4
до 4.3.4 была ошибка "бесконечного ожидания сокета при сбоях сети" - возможно, побочный эффект этой баги
Записан
altVis
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #2 :
Февраль 28, 2008, 16:25 »
Обновился, проблемы не решило
Записан
BRE
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #3 :
Февраль 28, 2008, 17:56 »
Цитата: altVis от Февраль 28, 2008, 16:25
Обновился, проблемы не решило
Может немного кода.
Записан
altVis
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #4 :
Февраль 28, 2008, 19:52 »
Проблема несовсем в qt или в коде.
Из программы выхожу так :
func(){
...
qApp->quit();
}
Если после quit() указать какие-то действия, то они выполняются.
Пишу под линуксом. И видимо без демона отслеживающего подключение, система не оповещается о недоступности сети.
Яркий пример konqueror из KDE. При такой ситуации при запуске "виснет" на некоторое время.
Моя программа после подключения продолжает стабильно работать, но при выходе видимо не может получить ответа на запрос и продолжает ждать по timeout.
Пока в голову приходит только какой-нибудь аварийный выход из программы.
Записан
BRE
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #5 :
Февраль 28, 2008, 20:23 »
Давай так, в примерах есть Fortune Client, отключи сеть и попробуй подключиться все равно к какому хосту, если ситуация повториться (подвис), проблема не в твоем коде, иначе смотреть твой код.
В общем, нужно как-то локализовать тот код, который приводит к зависанию. Если получиться сделать небольшую тестовую программку, которая будет воспроизводить данное поведение, это будет совсем гуд.
Записан
altVis
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #6 :
Февраль 28, 2008, 21:24 »
Простой пример:
Форма + кнопка
tst.cpp
#include "tst.h"
tst::tst(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
QTcpSocket *socket = new QTcpSocket(this);
socket->connectToHost("test.com", 1578);
}
tst::~tst()
{
}
void tst::on_pushButton_clicked()
{
qApp->quit();
}
Зависает после нажатия кнопки.
Если вместо qApp->quit() указать close(), то выходит без проблем.
Попробовал выход из своей программы по close(). Программа "висит", остаётся иконка в трее, но главное окно закрывается.
И ещё вопрос, как можно очистить сокет, кроме как socket->read(socket->bytesAvailable())?
«
Последнее редактирование: Февраль 28, 2008, 21:30 от altVis
»
Записан
BRE
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #7 :
Февраль 28, 2008, 21:50 »
У меня не зависает.
Возможно дело действительно в настройках сетевых служб в линуксе, и к Qt не относится.
«
Последнее редактирование: Февраль 28, 2008, 21:57 от BRE
»
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #8 :
Февраль 28, 2008, 22:22 »
А если попобывать перед qApp->quit() вызывать disconnectFromHost()?
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Вячеслав
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #9 :
Февраль 28, 2008, 22:33 »
Цитата: pastor от Февраль 28, 2008, 22:22
А если попобывать перед qApp->quit() вызывать disconnectFromHost()?
тогда уж abort() .
Или корркектнее таймер на пару секунд при выходе - есть соединения - abort им
Записан
altVis
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #10 :
Февраль 29, 2008, 22:48 »
отсоединяться я первым делом пробовал
Записан
Вячеслав
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #11 :
Февраль 29, 2008, 22:53 »
пробывал что дисконнект или аборт ? Дисконнект пытаеться данные сначала заслать, а аборт убивает сокет сразу ...
Записан
altVis
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #12 :
Март 01, 2008, 11:00 »
Ну конечно же и то, и то.
И просто удалять сокет из памяти пробовал, по нажатию кнопки.
Записан
Вячеслав
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #13 :
Март 01, 2008, 12:25 »
Хм ..... а если ручками попробывать имя отрезолвить через QHostInfo в отдельном потоке(с таймаутом) а потом цепляться к апишнику .... Хотя странно, я как-то по запаре сунул левый адрес в сетке- (не имя) таки прога вешалась внутре libc на connect'e , но через некоторое время оживала и шла резервные адреса пробывать .....
Записан
ant_studio
Гость
Re: "Зависание" программы при выходе после попытки tcp подключения без сети
«
Ответ #14 :
Март 14, 2008, 11:07 »
altVis
А сигнал о потере (закрытии) соединения ты получаешь?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...