#endif
#include <errmsg.h>
+#define MYSQL_DEFAULT_READ_TIMEOUT_SECS 30
+#define MYSQL_DEFAULT_WRITE_TIMEOUT_SECS 30
+
struct mysql_db {
struct sql_db api;
const char *option_file, *option_group;
in_port_t port;
unsigned int client_flags;
+ unsigned int connect_timeout, read_timeout, write_timeout;
time_t last_success;
MYSQL *mysql;
struct mysql_db *db = (struct mysql_db *)_db;
const char *unix_socket, *host;
unsigned long client_flags = db->client_flags;
- unsigned int secs_used, connect_timeout = SQL_CONNECT_TIMEOUT_SECS;
+ unsigned int secs_used;
time_t start_time;
bool failed;
db->option_file);
}
- mysql_options(db->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &connect_timeout);
+ mysql_options(db->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &db->connect_timeout);
+ mysql_options(db->mysql, MYSQL_OPT_READ_TIMEOUT, &db->read_timeout);
+ mysql_options(db->mysql, MYSQL_OPT_WRITE_TIMEOUT, &db->write_timeout);
mysql_options(db->mysql, MYSQL_READ_DEFAULT_GROUP,
db->option_group != NULL ? db->option_group : "client");
db->ssl_cipher = "HIGH";
db->ssl_verify_server_cert = 0; /* FIXME: change to 1 for v2.3 */
+ db->connect_timeout = SQL_CONNECT_TIMEOUT_SECS;
+ db->read_timeout = MYSQL_DEFAULT_READ_TIMEOUT_SECS;
+ db->write_timeout = MYSQL_DEFAULT_WRITE_TIMEOUT_SECS;
args = t_strsplit_spaces(connect_string, " ");
for (; *args != NULL; args++) {
} else if (strcmp(name, "client_flags") == 0) {
if (str_to_uint(value, &db->client_flags) < 0)
i_fatal("mysql: Invalid client flags: %s", value);
+ } else if (strcmp(name, "connect_timeout") == 0) {
+ if (str_to_uint(value, &db->connect_timeout) < 0)
+ i_fatal("mysql: Invalid read_timeout: %s", value);
+ } else if (strcmp(name, "read_timeout") == 0) {
+ if (str_to_uint(value, &db->read_timeout) < 0)
+ i_fatal("mysql: Invalid read_timeout: %s", value);
+ } else if (strcmp(name, "write_timeout") == 0) {
+ if (str_to_uint(value, &db->write_timeout) < 0)
+ i_fatal("mysql: Invalid read_timeout: %s", value);
} else if (strcmp(name, "ssl_cert") == 0)
field = &db->ssl_cert;
else if (strcmp(name, "ssl_key") == 0)