#include #include #include #include #include #include #include #include #include #include "client.h" static int sig[2]; static void sendsig(int signum) { signum=signum; /* Keep compiler quiet */ write(sig[1], "", 1); return; } void signal_init(void) { struct sigaction action; struct itimerval itimer; if (pipe(sig)) { fprintf(stderr, "pipe: %s\n", strerror(errno)); exit(1); } if (fcntl(sig[1], F_SETFL, O_NONBLOCK)) { fprintf(stderr, "fcntl: %s\n", strerror(errno)); exit(1); } action.sa_handler=sendsig; sigfillset(&action.sa_mask); action.sa_flags=SA_RESTART; if (sigaction(SIGALRM, &action, NULL)) { fprintf(stderr, "sigaction: %s\n", strerror(errno)); exit(1); } itimer.it_value.tv_sec=itimer.it_interval.tv_sec=update_interval; itimer.it_interval.tv_usec=itimer.it_value.tv_usec=PKT_INTERVAL_USEC; if (setitimer(ITIMER_REAL, &itimer, NULL)) { fprintf(stderr, "setitimer: %s\n", strerror(errno)); exit(1); } } void signal_preselect(int *maxfd, fd_set *fds, struct timeval *tvp) { tvp=tvp; /* Keep compiler quiet */ /* printf(" [signal: %i]", sig[0]); */ FD_SET(sig[0], fds); if (*maxfd