From e4701e7c86aecc7bd201ea2ed54282f2d4737092 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 24 Jun 2010 09:17:39 +0200 Subject: poll: Another attempt to get bsd_poll() working correctly. --- libssh/poll.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libssh/poll.c b/libssh/poll.c index 24bc56f1..b4e37cd5 100644 --- a/libssh/poll.c +++ b/libssh/poll.c @@ -146,9 +146,13 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { /* compute fd_sets and find largest descriptor */ for (rc = -1, max_fd = 0, i = 0; i < nfds; i++) { - if (fds[i].fd == SSH_INVALID_SOCKET || fds[i].fd >= FD_SETSIZE) { + if (fds[i].fd == SSH_INVALID_SOCKET) { continue; } + if (fds[i].fd >= FD_SETSIZE) { + rc = -1; + break; + } if (fds[i].events & (POLLIN | POLLRDNORM)) { FD_SET (fds[i].fd, &readfds); @@ -159,7 +163,7 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { if (fds[i].events & (POLLPRI | POLLRDBAND)) { FD_SET (fds[i].fd, &exceptfds); } - if (fds[i].fd >= max_fd && + if (fds[i].fd > max_fd && (fds[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLRDBAND | POLLWRNORM | POLLWRBAND))) { -- cgit