diff --git a/lib/resty/core/socket.lua b/lib/resty/core/socket.lua index ea973b7ba..3043c6066 100644 --- a/lib/resty/core/socket.lua +++ b/lib/resty/core/socket.lua @@ -424,52 +424,50 @@ local function sslhandshake(cosocket, reused_session, server_name, ssl_verify, error("no request ctx found", 2) end - if rc == FFI_OK then - if reused_session == false then - return true + if rc == FFI_ERROR then + if openssl_error_code[0] ~= 0 then + return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0]) end - rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u, - session_ptr, errmsg, openssl_error_code) + return nil, ffi_str(errmsg[0]) end - while true do - if rc == FFI_ERROR then - if openssl_error_code[0] ~= 0 then - return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0]) - end - - return nil, ffi_str(errmsg[0]) - end - - if rc == FFI_DONE then - return reused_session - end + if rc == FFI_DONE then + return reused_session + end - if rc == FFI_OK then - if reused_session == false then - return true - end + local res - rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u, - session_ptr, errmsg, openssl_error_code) + if rc == FFI_OK then + res = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u, + session_ptr, errmsg, openssl_error_code) + else + assert(rc == FFI_AGAIN) - assert(rc == FFI_OK) + co_yield() - if session_ptr[0] == nil then - return session_ptr[0] - end + res = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u, + session_ptr, errmsg, openssl_error_code) + end - return ffi_gc(session_ptr[0], C.ngx_http_lua_ffi_ssl_free_session) + if res == FFI_ERROR then + if openssl_error_code[0] ~= 0 then + return nil, openssl_error_code[0] .. ": " .. ffi_str(errmsg[0]) end + return nil, ffi_str(errmsg[0]) + end - assert(rc == FFI_AGAIN) + assert(res == FFI_OK) - co_yield() + if reused_session == false then + return true + end - rc = C.ngx_http_lua_ffi_socket_tcp_get_sslhandshake_result(r, u, - session_ptr, errmsg, openssl_error_code) + if session_ptr[0] == nil then + return session_ptr[0] end + + return ffi_gc(session_ptr[0], C.ngx_http_lua_ffi_ssl_free_session) end