From 657f6f3756f883e2a5899eaff9e0e59c4bc67995 Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Thu, 23 Feb 2017 12:02:48 -0800 Subject: [PATCH] common: use select for SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE tls errors --- common/ssl_calls.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/common/ssl_calls.c b/common/ssl_calls.c index 77a8db23..0bae2f5e 100644 --- a/common/ssl_calls.c +++ b/common/ssl_calls.c @@ -34,6 +34,7 @@ #include "ssl_calls.h" #include "trans.h" +#define SSL_WANT_READ_WRITE_TIMEOUT 100 #if OPENSSL_VERSION_NUMBER < 0x10100000L static inline HMAC_CTX * @@ -726,13 +727,16 @@ ssl_tls_read(struct ssl_tls *tls, char *data, int length) break_flag = 1; break; + /** + * retry when SSL_get_error returns: + * SSL_ERROR_WANT_READ + * SSL_ERROR_WANT_WRITE + */ case SSL_ERROR_WANT_READ: + g_sck_can_recv(tls->trans->sck, SSL_WANT_READ_WRITE_TIMEOUT); + continue; case SSL_ERROR_WANT_WRITE: - /** - * retry when SSL_get_error returns: - * SSL_ERROR_WANT_READ - * SSL_ERROR_WANT_WRITE - */ + g_sck_can_send(tls->trans->sck, SSL_WANT_READ_WRITE_TIMEOUT); continue; default: @@ -772,13 +776,16 @@ ssl_tls_write(struct ssl_tls *tls, const char *data, int length) break_flag = 1; break; + /** + * retry when SSL_get_error returns: + * SSL_ERROR_WANT_READ + * SSL_ERROR_WANT_WRITE + */ case SSL_ERROR_WANT_READ: + g_sck_can_recv(tls->trans->sck, SSL_WANT_READ_WRITE_TIMEOUT); + continue; case SSL_ERROR_WANT_WRITE: - /** - * retry when SSL_get_error returns: - * SSL_ERROR_WANT_READ - * SSL_ERROR_WANT_WRITE - */ + g_sck_can_send(tls->trans->sck, SSL_WANT_READ_WRITE_TIMEOUT); continue; default: