From be590cfa8cbcbb3f653d211fbf7900d0a9da5926 Mon Sep 17 00:00:00 2001 From: zixun Date: Tue, 21 May 2019 19:35:04 +0800 Subject: [PATCH] #1016 bugfix SSL_read and SSL_do_handshake --- lualib-src/ltls.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lualib-src/ltls.c b/lualib-src/ltls.c index 74b3a3bb..4c1275ab 100644 --- a/lualib-src/ltls.c +++ b/lualib-src/ltls.c @@ -178,10 +178,15 @@ _ltls_context_handshake(lua_State* L) { int ret = SSL_do_handshake(tls_p->ssl); if(ret == 1) { return 0; - } else if (ret == -1) { - int all_read = _bio_read(L, tls_p); - if(all_read>0) { - return 1; + } else if (ret < 0) { + int err = SSL_get_error(tls_p->ssl, ret); + if(err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) { + int all_read = _bio_read(L, tls_p); + if(all_read>0) { + return 1; + } + } else { + luaL_error(L, "SSL_do_handshake error:%d ret:%d", err, ret); } } else { int err = SSL_get_error(tls_p->ssl, ret); @@ -212,7 +217,7 @@ _ltls_context_read(lua_State* L) { read = SSL_read(tls_p->ssl, outbuff, sizeof(outbuff)); if(read < 0) { int err = SSL_get_error(tls_p->ssl, read); - if(err == SSL_ERROR_WANT_READ) { + if(err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) { break; } luaL_error(L, "SSL_read error:%d", err); @@ -221,7 +226,7 @@ _ltls_context_read(lua_State* L) { }else if (read > 0) { luaL_addlstring(&b, outbuff, read); } - }while(read == sizeof(outbuff)); + }while(true); luaL_pushresult(&b); return 1; }