libmariadb.dll:如何修改默认连接超时时间及检测超时发生
修改MariaDB Connector/C(libmariadb.dll)连接超时及检测方法
设置连接超时的核心函数
要修改连接不可用服务器时的超时时间,核心是在调用连接函数前,通过mysql_options()或mysql_optionsv()设置对应的超时选项。常用的关键选项有:
MYSQL_OPT_CONNECT_TIMEOUT:控制连接阶段的超时时间(单位:秒),默认通常为10秒。设置后,当尝试连接超过该时间仍未建立,会触发超时。- 可选补充:
MYSQL_OPT_READ_TIMEOUT和MYSQL_OPT_WRITE_TIMEOUT,分别控制后续读写操作的超时,若需要后续交互也限制超时可一并设置。
代码示例
// 初始化连接句柄 MYSQL *conn = mysql_init(NULL); if (!conn) { fprintf(stderr, "初始化连接句柄失败\n"); return 1; } // 设置连接超时为5秒 unsigned int connect_timeout = 5; if (mysql_options(conn, MYSQL_OPT_CONNECT_TIMEOUT, &connect_timeout) != 0) { fprintf(stderr, "设置连接超时失败: %s\n", mysql_error(conn)); mysql_close(conn); return 1; } // 可选:设置读写操作超时(若后续需要) if (mysql_options(conn, MYSQL_OPT_READ_TIMEOUT, &connect_timeout) != 0) { fprintf(stderr, "设置读超时失败: %s\n", mysql_error(conn)); mysql_close(conn); return 1; } // 尝试建立连接 if (!mysql_real_connect(conn, "your_host", "your_user", "your_pass", "your_db", 3306, NULL, 0)) { // 检测是否为超时错误 switch(mysql_errno(conn)) { case CR_CONN_HOST_ERROR: fprintf(stderr, "连接主机超时\n"); break; case CR_CONNECTION_ERROR: fprintf(stderr, "连接过程超时/失败\n"); break; default: fprintf(stderr, "连接失败: %s\n", mysql_error(conn)); break; } mysql_close(conn); return 1; } // 连接成功后的逻辑... mysql_close(conn);
检测超时的方法
当mysql_real_connect()返回NULL时,通过以下方式判断是否为超时:
- 调用
mysql_errno()获取错误码,匹配超时相关的错误常量:CR_CONN_HOST_ERROR:无法在指定时间内连接到目标主机,典型的连接超时场景。CR_CONNECTION_ERROR:连接过程中出现错误,包含部分超时情况(如握手阶段超时)。
- 辅助验证:调用
mysql_error()获取错误描述,超时场景下通常会包含"Timeout during connect"或类似关键词。
注意事项
MYSQL_OPT_CONNECT_TIMEOUT的取值范围是1到31536000秒(即一年),超出范围会被截断到合法值。- 系统级TCP超时设置可能会影响最终实际超时时间,但Connector/C的选项会优先在应用层进行控制。
- 若使用旧版的
mysql_connect()函数,同样可以先调用mysql_options()设置选项,因为mysql_connect()内部会调用mysql_real_connect()。
内容的提问来源于stack exchange,提问作者Franck S
相关产品推荐
相关产品推荐

