diff options
author | Andrew Wiley <wiley@outlook.com> | 2021-05-07 12:38:00 -0700 |
---|---|---|
committer | Jakub Jelen <jjelen@redhat.com> | 2021-10-11 14:01:09 +0200 |
commit | 1a831cfe2c5c6394a92f3fe37cbfd88cc149187d (patch) | |
tree | 86f08f80b08600cddbab9fab3f46b711bc18abac /src | |
parent | 95539ba0ebe0f71f77c621befb26dd836f0ffd0c (diff) | |
download | libssh-1a831cfe2c5c6394a92f3fe37cbfd88cc149187d.tar.gz libssh-1a831cfe2c5c6394a92f3fe37cbfd88cc149187d.tar.xz libssh-1a831cfe2c5c6394a92f3fe37cbfd88cc149187d.zip |
emulated poll: polling for nothing should at least get socket errors
Signed-off-by: Andrew Wiley <wiley@outlook.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/poll.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -246,19 +246,17 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) } #endif - if (fds[i].events & (POLLIN | POLLRDNORM)) { - FD_SET (fds[i].fd, &readfds); - } + // we use the readfds to get POLLHUP and POLLERR, which are provided even when not requested + FD_SET (fds[i].fd, &readfds); + if (fds[i].events & (POLLOUT | POLLWRNORM | POLLWRBAND)) { FD_SET (fds[i].fd, &writefds); } if (fds[i].events & (POLLPRI | POLLRDBAND)) { FD_SET (fds[i].fd, &exceptfds); } - if (fds[i].fd > max_fd && - (fds[i].events & (POLLIN | POLLOUT | POLLPRI | - POLLRDNORM | POLLRDBAND | - POLLWRNORM | POLLWRBAND))) { + + if (fds[i].fd > max_fd) { max_fd = fds[i].fd; rc = 0; } |