From 1a831cfe2c5c6394a92f3fe37cbfd88cc149187d Mon Sep 17 00:00:00 2001 From: Andrew Wiley Date: Fri, 7 May 2021 12:38:00 -0700 Subject: [PATCH] emulated poll: polling for nothing should at least get socket errors Signed-off-by: Andrew Wiley Reviewed-by: Jakub Jelen --- src/poll.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/poll.c b/src/poll.c index 46206949..82c9b18b 100644 --- a/src/poll.c +++ b/src/poll.c @@ -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; }