Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qt mysql корректно отключиться от сервера
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
_KUL
Делаю:

    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL","mydb1");
    db.setHostName("10.10.10.10");
    db.setDatabaseName("10");
    db.setUserName("10");
    db.setPassword("10");
    db.open();

    QSqlQuery query(db);
    query.exec("SELECT 01 FROM 01 GROUP by 01");
    
    db.database("mydb1").close();


Лезу на сервак, делаю "покажи соединения с mysql"
И вижу, что моё соединение висит как TIME_WAIT

Вопрос: как корректно закрыть соединение? Что я делаю не так? Или как послать сигнал mysql серверу, чтобы он разорвал со мной соединение?
Алексей1153
так ты же базу закрываешь. Логичнее предположить, что

db.close();
_KUL
Пожалуйста, делаем даже для тефолтного соединения:

    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("10.10.10.10");
    db.setDatabaseName("10");
    db.setUserName("10");
    db.setPassword("10");
    db.open();

    QSqlQuery query;
    query.exec("SELECT 01 FROM 01 GROUP by 01");
    
    db.close();


Всё равно висит WAIT на mysql сервере ... Как же мне сделать disconnect явный, чтобы сервер меня отключил и не ожидал ничего?
ViGOur
Как я понимаю, TIME_WAIT это ничто иное как:
ESTABLISHED -> FIN_WAIT_1-> FIN_WAIT_2 -> TIME_WAIT -> CLOSED.

Подробней показано на рисунке:


Возможно будет интересно почитать: A TCP Tutorial
_KUL
Так вот в том и проблема, как же мне это событие CLOSED то и сделать средствами класса QSqlDatabase ? :(
ViGOur
TIME_WAIT появляется в следствии того, что закрытие соединения было выполнено и все идет хорошо.
Состояние CLOSED, устанавливается средствами самой операционной системы. Единственное что ты можешь в этом случае сделать, это подкрутить, чтобы TIME_WAIT меньше времени висел.
_KUL
А как же тогда монстры вроде Navicat и EMS при выходе сразу же разрывают соединения и никаких вайтов не висит??? Или у них таймвайт в 1сек выставлен и меньше?! А можно как-то средствами Qt TIME_WAIT выставить вручную? (обычно минуту/2 всисит соединение )
ViGOur
В linux есть такоей файл как /proc/sys/net/ipv4/tcp_fin_timeout, в котором задан этот самый таймаут. В винде не помню где в реестре это указывается...
У них скорее всего не висит потому, что это в принципе избыточная информация.
_KUL
Спасибо, вроде понял ...
http://qt-project.org/forums/viewthread/17655/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.