Home
       pselect: set a timeout of 1 second - teed - A multiplex relay tee(1) daemon.
  HTML git clone git://bitreich.org/teed git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/teed
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 8d1db0f43e921b998a06dd61d1442220db29ee89
   DIR parent 18db7808b4a41155537b83db1294720403990b4c
  HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon, 14 Aug 2023 14:22:16 +0200
       
       pselect: set a timeout of 1 second
       
       This is for sockets that are closed. These are signalled by FD_ISSET and a
       read() that returns 0.  This way it can handle them directly when it occurs vs
       on the next read of a socket.
       
       Signed-off-by: Christoph Lohmann <20h@r-36.net>
       
       Diffstat:
         M teed.c                              |       5 ++++-
       
       1 file changed, 4 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/teed.c b/teed.c
       @@ -161,6 +161,7 @@ main(int argc, char *argv[])
                llist *wfds, *rfds, *lfds, *e, *qe;
                socklen_t saddrlen, cltlen;
                fd_set fdset;
       +        struct timespec timeout;
        
                initsignals();
        
       @@ -210,6 +211,8 @@ main(int argc, char *argv[])
                        lfds = llist_put(lfds, &lfd, sizeof(lfd));
                }
        
       +        timeout.tv_sec = 1;
       +        timeout.tv_nsec = 0;
                for (;;) {
                        maxsfd = 0;
                        FD_ZERO(&fdset);
       @@ -224,7 +227,7 @@ main(int argc, char *argv[])
                                        maxsfd = *(int *)e->data;
                        }
        
       -                if (pselect(maxsfd+1, &fdset, NULL, NULL, NULL, NULL) < 0) {
       +                if (pselect(maxsfd+1, &fdset, NULL, NULL, &timeout, NULL) < 0) {
                                if (errno == EINTR)
                                        continue;
                                perror("pselect");