From 98490f79a7005b32ce1ae0e4cf48d15ba73566af Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Fri, 7 Aug 2020 21:44:24 -0400 Subject: [PATCH] Fix select() portability issues in src/server.c Fix select() portability issues in src/server.c by using gettimeofday() immediately prior to and after calling select() to calculate elapsed time since blocking on select() --- src/server.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/server.c b/src/server.c index 8a331c2..5357f0e 100644 --- a/src/server.c +++ b/src/server.c @@ -1968,20 +1968,29 @@ int patty_ax25_server_run(patty_ax25_server *server) { while (1) { int nready; - struct timeval timer = { 1, 0 }, - remaining = { 1, 0 }; + struct timeval timeout = { 1, 0 }, + before, + after; memcpy(&server->fds_r, &server->fds_watch, sizeof(server->fds_r)); + if (gettimeofday(&before, NULL) < 0) { + goto error_gettimeofday; + } + if ((nready = select( server->fd_max, &server->fds_r, NULL, NULL, - &remaining)) < 0) { + &timeout)) < 0) { goto error_io; } - timersub(&timer, &remaining, &server->elapsed); + if (gettimeofday(&after, NULL) < 0) { + goto error_gettimeofday; + } + + timersub(&after, &before, &server->elapsed); if (handle_clients(server) < 0) { goto error_io; @@ -2004,6 +2013,7 @@ int patty_ax25_server_run(patty_ax25_server *server) { return 0; +error_gettimeofday: error_io: close(server->fd);