From 6d6019a3dbcc46c7b1bf0efcd3b7e3ae98aefad6 Mon Sep 17 00:00:00 2001 From: eugene Date: Tue, 7 Nov 2023 16:47:20 -0500 Subject: [PATCH] make sure to check blocked io --- src/openssl/engine.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/openssl/engine.c b/src/openssl/engine.c index 70639a7..1ca4d23 100644 --- a/src/openssl/engine.c +++ b/src/openssl/engine.c @@ -901,11 +901,21 @@ static int tls_write(tlsuv_engine_t self, const char *data, size_t data_len) { size_t wrote = 0; while (data_len > wrote) { - size_t written; - if (!SSL_write_ex(eng->ssl, (const unsigned char *)(data + wrote), data_len - wrote, &written)) { - eng->error = ERR_get_error(); - UM_LOG(ERR, "openssl: write error: %s", tls_error(eng->error)); - return -1; + size_t written = 0; + int ret = SSL_write_ex(eng->ssl, (const unsigned char *) (data + wrote), data_len - wrote, &written); + if (ret == 0) { + int err = SSL_get_error(eng->ssl, 0); + if (err == SSL_ERROR_WANT_WRITE) { + if (wrote > 0) { + return (int)wrote; + } else { + return TLS_AGAIN; + } + } else { + eng->error = err; + UM_LOG(ERR, "openssl: write error: %s", tls_error(eng->error)); + return -1; + } } wrote += written; }