diff options
author | Andreas Schneider <asn@cynapses.org> | 2010-06-24 09:17:39 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cynapses.org> | 2010-06-24 09:19:34 +0200 |
commit | e4701e7c86aecc7bd201ea2ed54282f2d4737092 (patch) | |
tree | 27d4c600c27de8fafef45c96d6387f7a554e06ac /libssh | |
parent | fc625b8a8ea32a180b6d96b69c2362bfebe51afa (diff) | |
download | libssh-e4701e7c86aecc7bd201ea2ed54282f2d4737092.tar.gz libssh-e4701e7c86aecc7bd201ea2ed54282f2d4737092.tar.xz libssh-e4701e7c86aecc7bd201ea2ed54282f2d4737092.zip |
poll: Another attempt to get bsd_poll() working correctly.
Diffstat (limited to 'libssh')
-rw-r--r-- | libssh/poll.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libssh/poll.c b/libssh/poll.c index 24bc56f..b4e37cd 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))) { |