From 12d575b8e6922001e7c520f115e77ae540b68341 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 11 Nov 2016 13:06:05 -0800 Subject: [PATCH] GUACAMOLE-118: Migrate to poll() instead of select() for guacd's SSL/TLS guac_socket implementation. --- src/guacd/socket-ssl.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/guacd/socket-ssl.c b/src/guacd/socket-ssl.c index 32e82a2b..4f19442a 100644 --- a/src/guacd/socket-ssl.c +++ b/src/guacd/socket-ssl.c @@ -21,8 +21,8 @@ #include "socket-ssl.h" +#include #include -#include #include #include @@ -70,24 +70,22 @@ static int __guac_socket_ssl_select_handler(guac_socket* socket, int usec_timeou guac_socket_ssl_data* data = (guac_socket_ssl_data*) socket->data; - fd_set fds; - struct timeval timeout; int retval; - /* Initialize fd_set with single underlying file descriptor */ - FD_ZERO(&fds); - FD_SET(data->fd, &fds); + /* Initialize with single underlying file descriptor */ + struct pollfd fds[1] = {{ + .fd = data->fd, + .events = POLLIN, + .revents = 0, + }}; /* No timeout if usec_timeout is negative */ if (usec_timeout < 0) - retval = select(data->fd + 1, &fds, NULL, NULL, NULL); + retval = poll(fds, 1, -1); - /* Handle timeout if specified */ - else { - timeout.tv_sec = usec_timeout/1000000; - timeout.tv_usec = usec_timeout%1000000; - retval = select(data->fd + 1, &fds, NULL, NULL, &timeout); - } + /* Handle timeout if specified, rounding up to poll()'s granularity */ + else + retval = poll(fds, 1, (usec_timeout + 999) / 1000); /* Properly set guac_error */ if (retval < 0) {