【问题标题】:How to reduce MySQL connection timeout in C code如何在 C 代码中减少 MySQL 连接超时
【发布时间】:2017-01-09 14:29:55
【问题描述】:

我正在测试一些 mysql 与我的 C 代码的集成。我注意到,如果在二进制文件运行时 mydomain.com 不可用,它会停留 2 分钟多一点。我想避免这种情况并将超时设置为最多 5 秒。我该怎么做?

#include <my_global.h>
#include <mysql.h>

int main() {

    MYSQL *con = mysql_init(NULL);

    if (con == NULL) {
        fprintf(stderr, "%s\n", "debug: could not initialize database");
        exit(1);
    }

    if (mysql_real_connect(con, "mydomain.com", "testuser", 
            "testuserpwd", "db_test", 0, NULL, 0) == NULL) {
        exit(1);
    }
    ...
    mysql_close(con);

}

【问题讨论】:

  • 哦!我认为mysql_error(con) 在证明con == NULL 不好之后。如果您无法初始化 MySQL,那么这不是 mysql 的错,因此,到目前为止,mysql 所知道的内容将是“没有错误”。
  • @Iharob - 如果您指的是不释放内存,则上面的代码 sn-p 不完整。我现在添加了mysql_close(con);
  • 我的意思是exit(1)之前的一个。
  • @geohei 对我来说看起来像是客户端选项。描述说:在 mysql_init() 之后和 mysql_connect() 之前调用 mysql_options()。具体来说,您应该查看选项MYSQL_OPT_CONNECT_TIMEOUT

标签: mysql c timeout


【解决方案1】:

这里的代码可以按需要工作。如果服务器不可用,则超时现在为 5 秒 i.s.o。 2 分钟。

感谢您的帮助!

#include <my_global.h>
#include <mysql.h>

int main() {

    MYSQL *con = mysql_init(NULL);
    unsigned int mysql_ct;

    mysql_ct = 5;

    if (con == NULL) {
        fprintf(stderr, "%s\n", "debug: could not initialize database");
        exit(1);
    }

    if (mysql_options(mysql_con, MYSQL_OPT_CONNECT_TIMEOUT, &mysql_ct)) {
        fprintf(stderr, "debug (mysql): [mysql_options] failed.");
    }

    if (mysql_real_connect(con, "mydomain.com", "testuser", 
            "testuserpwd", "db_test", 0, NULL, 0) == NULL) {
        exit(1);
    }
    ...
    mysql_close(con);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 2013-08-25
    • 2017-09-08
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2018-07-30
    • 2011-05-18
    相关资源
    最近更新 更多