diff --git a/src/session.c b/src/session.c
index 91b36b7..6a9b2a6 100644
--- a/src/session.c
+++ b/src/session.c
@@ -615,12 +615,17 @@ int ssh_handle_packets_termination(ssh_session session,
         if (ret == SSH_ERROR) {
             break;
         }
-        if (ssh_timeout_elapsed(&ts,timeout)) {
-            ret = fct(user) ? SSH_OK : SSH_AGAIN;
-            break;
+        if (timeout == SSH_TIMEOUT_NONBLOCKING) {
+            if (ret == SSH_AGAIN)
+                break;
+        }
+        else {
+            if (ssh_timeout_elapsed(&ts,timeout)) {
+                ret = fct(user) ? SSH_OK : SSH_AGAIN;
+                break;
+            }
+            tm = ssh_timeout_update(&ts, timeout);
         }
-
-        tm = ssh_timeout_update(&ts, timeout);
     }
 
     return ret;
