You've already forked mariadb-connector-c
mirror of
https://github.com/mariadb-corporation/mariadb-connector-c.git
synced 2025-08-08 14:02:17 +03:00
OpenSSL timeout fix:
Since timeout was already set via setsockopt, we call wait_io_or_timeout() with a very small timeout (5ms) to get a more precise errno, which is used by OpenSSL's error function.
This commit is contained in:
@@ -567,11 +567,13 @@ my_bool ma_tls_connect(MARIADB_TLS *ctls)
|
||||
{
|
||||
switch((SSL_get_error(ssl, rc))) {
|
||||
case SSL_ERROR_WANT_READ:
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, mysql->options.connect_timeout) < 1)
|
||||
/* use low timeout, see ma_tls_read */
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, 5) < 1)
|
||||
try_connect= 0;
|
||||
break;
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, mysql->options.connect_timeout) < 1)
|
||||
/* use low timeout, see ma_tls_read */
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, 5) < 1)
|
||||
try_connect= 0;
|
||||
break;
|
||||
default:
|
||||
@@ -655,7 +657,10 @@ ssize_t ma_tls_read(MARIADB_TLS *ctls, const uchar* buffer, size_t length)
|
||||
int error= SSL_get_error((SSL *)ctls->ssl, rc);
|
||||
if (error != SSL_ERROR_WANT_READ)
|
||||
break;
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, pvio->mysql->options.read_timeout) < 1)
|
||||
/* To get a more precise error message than "resource temporary
|
||||
unavailable" (=errno 11) after read timeout occured, we check
|
||||
the socket status using a very small timeout (=5 ms) */
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, 5) < 1)
|
||||
break;
|
||||
}
|
||||
if (rc <= 0)
|
||||
@@ -676,7 +681,8 @@ ssize_t ma_tls_write(MARIADB_TLS *ctls, const uchar* buffer, size_t length)
|
||||
int error= SSL_get_error((SSL *)ctls->ssl, rc);
|
||||
if (error != SSL_ERROR_WANT_WRITE)
|
||||
break;
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, pvio->mysql->options.write_timeout) < 1)
|
||||
/* use low timeout, see ma_tls_read */
|
||||
if (pvio->methods->wait_io_or_timeout(pvio, TRUE, 5) < 1)
|
||||
break;
|
||||
}
|
||||
if (rc <= 0)
|
||||
|
Reference in New Issue
Block a user