1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

CONC-377: Add IO Callback

Applied part of the patch from https://github.com/MariaDB/mariadb-connector-c/pull/71
The part for named pipes doesn't work, since wait_io was reworked by vvaintroub.
This commit is contained in:
Georg Richter
2018-12-01 16:46:46 +01:00
parent 3ffa60dbea
commit abce2a3ab3
4 changed files with 18 additions and 1 deletions

View File

@@ -71,6 +71,7 @@ struct st_mysql_options_extension {
char *server_public_key; char *server_public_key;
char *proxy_header; char *proxy_header;
size_t proxy_header_len; size_t proxy_header_len;
int (*io_wait)(my_socket handle, my_bool is_read, int timeout);
}; };
typedef struct st_connection_handler typedef struct st_connection_handler

View File

@@ -233,7 +233,8 @@ extern const char *SQLSTATE_UNKNOWN;
MARIADB_OPT_MULTI_RESULTS, MARIADB_OPT_MULTI_RESULTS,
MARIADB_OPT_MULTI_STATEMENTS, MARIADB_OPT_MULTI_STATEMENTS,
MARIADB_OPT_INTERACTIVE, MARIADB_OPT_INTERACTIVE,
MARIADB_OPT_PROXY_HEADER MARIADB_OPT_PROXY_HEADER,
MARIADB_OPT_IO_WAIT
}; };
enum mariadb_value { enum mariadb_value {

View File

@@ -3013,6 +3013,10 @@ mysql_optionsv(MYSQL *mysql,enum mysql_option option, ...)
case MYSQL_OPT_TLS_VERSION: case MYSQL_OPT_TLS_VERSION:
OPT_SET_EXTENDED_VALUE_STR(&mysql->options, tls_version, (char *)arg1); OPT_SET_EXTENDED_VALUE_STR(&mysql->options, tls_version, (char *)arg1);
break; break;
case MARIADB_OPT_IO_WAIT:
CHECK_OPT_EXTENSION_SET(&mysql->options);
mysql->options.extension->io_wait = (int(*)(my_socket, my_bool, int))arg1;
break;
default: default:
va_end(ap); va_end(ap);
return(-1); return(-1);
@@ -3227,6 +3231,9 @@ mysql_get_optionv(MYSQL *mysql, enum mysql_option option, void *arg, ...)
case MARIADB_OPT_CONNECTION_HANDLER: case MARIADB_OPT_CONNECTION_HANDLER:
*((char **)arg)= mysql->options.extension ? mysql->options.extension->connection_handler : NULL; *((char **)arg)= mysql->options.extension ? mysql->options.extension->connection_handler : NULL;
break; break;
case MARIADB_OPT_IO_WAIT:
*((int(**)(my_socket, my_bool, int))arg) = mysql->options.extension ? mysql->options.extension->io_wait : NULL;
break;
default: default:
va_end(ap); va_end(ap);
return(-1); return(-1);

View File

@@ -504,6 +504,14 @@ int pvio_socket_wait_io_or_timeout(MARIADB_PVIO *pvio, my_bool is_read, int time
if (!pvio || !pvio->data) if (!pvio || !pvio->data)
return 0; return 0;
if (pvio->mysql->options.extension &&
pvio->mysql->options.extension->io_wait != NULL) {
my_socket handle;
if (pvio_socket_get_handle(pvio, &handle))
return 0;
return pvio->mysql->options.extension->io_wait(handle, is_read, timeout);
}
csock= (struct st_pvio_socket *)pvio->data; csock= (struct st_pvio_socket *)pvio->data;
{ {
#ifndef _WIN32 #ifndef _WIN32