static void bb_select_once() { int i; fd_set fdreads; int fdmax = 0; int n; FD_ZERO(&fdreads); for(i=0; i<RECEIVERS_MAX && BellBoy->receivers[i] != NULL; ++i){ Receiver *rev = BellBoy->receivers[i]; log_debug("bb_select_once:select %d:%d", i, rev->fd); if(rev->select_for_read == false) continue; FD_SET(rev->fd, &fdreads); if(fdmax < rev->fd) fdmax = rev->fd; } n = select(fdmax+1, &fdreads, NULL, NULL, &BellBoy->select_timeout); if(n > 0){ for(i=0; i<RECEIVERS_MAX && BellBoy->receivers[i] != NULL; ++i){ Receiver *rev = BellBoy->receivers[i]; if(FD_ISSET(rev->fd, &fdreads)){ log_debug("bb_select_once:call %d:%d", i, rev->fd); rev->select_for_read = rev->call(rev->fd, rev->data); } } } }