From cc486b2ebfe2c155eb2582f18b2dfd54b7f6f33e Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 10 Sep 2015 23:06:05 +0100 Subject: [PATCH] Continue open SSL connect loop on recoverable errors --- src/tls_openssl.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tls_openssl.c b/src/tls_openssl.c index 6d2a557..3d9d49c 100644 --- a/src/tls_openssl.c +++ b/src/tls_openssl.c @@ -102,9 +102,11 @@ int tls_start(tls_t *tls) succeeds or fails */ while (ret < 0) { ret = SSL_connect(tls->ssl); + int err = SSL_get_error(tls->ssl, ret); + int recoverable = tls_is_recoverable(err); - /* wait for something to happen on the sock before looping back */ - if (ret < 0) { + // continue if recoverable + if (recoverable) { fd_set fds; struct timeval tv; @@ -115,6 +117,8 @@ int tls_start(tls_t *tls) FD_SET(tls->sock, &fds); select(tls->sock + 1, &fds, &fds, NULL, &tv); + } else { + ret = 1; } }