while (1) { sigprocmask(SIG_BLOCK, &newmask, &oldmask); if (receive_signal != 0) handle_signal(); sigprocmask(SIG_SETMASK, &oldmask, NULL); n = select(nfd, rset, wset, eset, NULL); if (n < 0) { if (errno == EINTR) { continue; } } else handle_filedata(); }