rem: if(select(maxfd+1, &fds, 0, 0, 0) == -1) usage("select failed!");
add: while(select(maxfd+1, &fds, 0, 0, 0) == -1) { if(errno != EINTR) usage("select failed!"); }
context: int main(int argc, char* argv[]){  fd_set fds;  parse_args(argc, argv);  atexit(exitfn);  for(;;) {    struct filter_node* filter;    int maxfd = -1;    FD_ZERO(&fds);    for(filter = filters; filter; filter = filter->next) {      int fd = filter->fd;      FD_SET(fd, &fds);      if(fd > maxfd)	maxfd = fd;    }    if(select(maxfd+1, &fds, 0, 0, 0) == -1)      usage("select failed!");    for(filter = filters; filter; filter = filter->next)      if(FD_ISSET(filter->fd, &fds))	handle_fd(filter);  }}