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