--- /dev/null
+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();
+}