diff options
-rw-r--r-- | src/poll.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -597,11 +597,17 @@ int ssh_poll_ctx_dopoll(ssh_poll_ctx ctx, int timeout) { ssh_poll_handle p; socket_t fd; int revents; + struct ssh_timestamp ts; if (!ctx->polls_used) return SSH_ERROR; - rc = ssh_poll(ctx->pollfds, ctx->polls_used, timeout); + ssh_timestamp_init(&ts); + do { + int tm = ssh_timeout_update(&ts, timeout); + rc = ssh_poll(ctx->pollfds, ctx->polls_used, tm); + } while (rc == -1 && errno == EINTR); + if(rc < 0) return SSH_ERROR; if (rc == 0) |