如何使用MySQL ++设置mysql_ping超时

我希望mysql_ping在几秒钟内超时。在下面的测试用例中,如果建立连接后跟“ifconfig eth0 down”,则永远不会达到conn.ping()的错误一面。线程/进程进入似乎无休止的等待。我想更改它并使其超时更快,最好使用MySQL ++选项。知道哪个选项可能是什么? 也许我还需要设置它会重试多少次? 阅读MySQL的文档,它告诉我们mysql_ping会尝试自动重新连接。这很好,但最终我还希望它能够超时。 http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html http://dev.mysql.com/doc/refman/5.1/en/mysql-ping.html 由于它自动重新连接,MYSQL_OPT_CONNECT_TIMEOUT似乎是要走的路。但是在下面的测试用例中设置mysqlpp :: ConnectTimeoutOption(1)并没有帮助。 看起来像MySQL ++ ping()只是C API的包装,我从“/usr/include/mysql++/dbdriver.h”收集它,它将ping()定义为: bool ping(){return!mysql_ping(& mysql_); } 我正在使用的库的版本是: libmysql ++ - dev:3.0.9-1 + b1 libmysql ++ 3:3.0.9-1 + b1 mysql-client-5.1:5.1.49-3
#include <iostream>
#include <mysql++/mysql++.h>

//g++ -o test -I/usr/include/mysql/ -lmysqlpp testcase_mysql_timeout.cpp
int main(int argc, char *argv[]) {
    mysqlpp::Connection conn;

    conn = mysqlpp::Connection(true);
    try {
        conn.set_option(new mysqlpp::MultiStatementsOption(true));
        conn.set_option(new mysqlpp::ConnectTimeoutOption(1));
        conn.set_option(new mysqlpp::InteractiveOption(true));
    }
    catch (mysqlpp::BadOption &e) {
        std::cerr << "ConnectDB exception: " << e.what() << std::endl;
    }
    conn.connect("MyDB", "my.dyndns.org", "user", "password", 3306);

    while(1) {
        if (!conn.ping()) {
            std::cout << "Host not reachable. Try to reconnect?" << std::endl;
        }
        else {
            std::cout << "Host is reachable all is good." << std::endl;
        }
        usleep(1000000);
    }
}

    
已邀请:
我担心我必须回答我自己的问题:) 阅读更多的MySQL文档给出了答案。在这种情况下设置连接超时非常少。它仍然必须等待TCP / IP Close_Wait_Timeout,默认值为10分钟: http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html MYSQL_OPT_READ_TIMEOUT(参数类型:unsigned int *) 尝试从服务器读取的超时秒数。每次尝试都使用此超时值,并在必要时进行重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便可以比TCP / IP Close_Wait_Timeout值10分钟之前检测到丢失的连接。在MySQL 5.1.41之前,此选项仅适用于TCP / IP连接,并且在MySQL 5.1.12之前仅适用于Windows。     

要回复问题请先登录注册