C++ 如何使用mysql+设置mysql的ping超时+;

C++ 如何使用mysql+设置mysql的ping超时+;,c++,mysql,timeout,mysql++,connection-timeout,C++,Mysql,Timeout,Mysql++,Connection Timeout,我希望mysql\u ping在几秒钟内超时。在下面的测试用例中,如果建立了连接,后跟“ifconfig eth0 down”,则永远不会到达conn.ping()的错误端。线程/进程进入了似乎是无止境的等待。我想改变这一点,让它超时更快,最好使用MySQL++选项。你知道那可能是哪种选择吗 也许我还需要设置它将重试多少次 阅读MySQL的文档,它告诉我们MySQL将尝试自动重新连接。这很好,但最终我也希望它暂停 http://dev.mysql.com/doc/refman/5.1/en/my

我希望mysql\u ping在几秒钟内超时。在下面的测试用例中,如果建立了连接,后跟“ifconfig eth0 down”,则永远不会到达conn.ping()的错误端。线程/进程进入了似乎是无止境的等待。我想改变这一点,让它超时更快,最好使用MySQL++选项。你知道那可能是哪种选择吗

也许我还需要设置它将重试多少次

阅读MySQL的文档,它告诉我们MySQL将尝试自动重新连接。这很好,但最终我也希望它暂停

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);
        }
    }
    
    
    
    #包括
    #包括
    //g++-o test-I/usr/include/mysql/-lmysqlpp testcase\u mysql\u timeout.cpp
    int main(int argc,char*argv[]){
    mysqlpp::连接连接;
    conn=mysqlpp::Connection(true);
    试一试{
    conn.set_选项(新的mysqlpp::multistatesoption(true));
    conn.set_选项(新的mysqlpp::ConnectTimeoutOption(1));
    conn.set_选项(新的mysqlpp::InteractiveOption(true));
    }
    catch(mysqlpp::BadOption&e){
    
    恐怕我得回答我自己的问题:)

    通过阅读更多的MySQL文档,可以得到答案。在这种情况下,设置连接超时的作用很小。它仍然需要等待TCP/IP关闭\u等待\u超时,默认值为10分钟:

    MYSQL\u OPT\u READ\u超时(参数类型:unsigned int*)

    尝试从服务器读取的超时(以秒为单位)。每次尝试都使用此超时值,必要时会重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便在TCP/IP关闭\u等待\u超时值10分钟之前检测到断开连接。MySQL 5之前.1.41,此选项仅适用于TCP/IP连接,在MySQL 5.1.12之前,仅适用于Windows