diff --git a/src/async.c b/src/async.c
index 9009329..76d4193 100644
--- a/src/async.c
+++ b/src/async.c
@@ -19,6 +19,7 @@
 #include <pthread.h>
 #include <semaphore.h>
 #include <unistd.h>
+#include <openssl/ssl.h>
 
 #define ASYNC_MAX_EVENTS 16
 
@@ -167,6 +168,11 @@ static int async_check(evt_listen_t *evt) {
     }};
 
     // check, if fd is already ready
+    if (evt->events & ASYNC_IN && evt->socket && evt->socket->enc && SSL_pending(evt->socket->ssl) > 0) {
+        // ssl layer already ready
+        if (async_exec(evt, ASYNC_IN) == 0)
+            return 1;
+    }
     switch (poll(fds, 1, 0)) {
         case 1:
             // fd already ready