5 kx
5 kx /* begin *
5 kx
5 kx Следовало бы заменить старый BSD4.3 код на POSIX.
5 kx ================================================
5 kx
5 kx Например, вызовы sigblock(), sigpause():
5 kx ---------------------------------------
5 kx
5 kx #define SIGBLOCK (sigmask(SIGCHLD)|sigmask(SIGHUP)|sigmask(SIGALRM))
5 kx
5 kx
5 kx int
5 kx main(argc, argv, envp)
5 kx int argc;
5 kx char *argv[], *envp[];
5 kx {
5 kx
5 kx . . .
5 kx
5 kx for (;;) {
5 kx int n, ctrl = -1;
5 kx fd_set readable;
5 kx
5 kx if (nsock == 0) {
5 kx (void) sigblock(SIGBLOCK);
5 kx while (nsock == 0)
5 kx sigpause(0L);
5 kx (void) sigsetmask(0L);
5 kx }
5 kx
5 kx . . .
5 kx
5 kx
5 kx пора менять на POSIX вызовы: sigprocmask(), sigsuspend():
5 kx --------------------------------------------------------
5 kx
5 kx
5 kx int
5 kx main(argc, argv, envp)
5 kx int argc;
5 kx char *argv[], *envp[];
5 kx {
5 kx
5 kx . . .
5 kx
5 kx sigset_t mask, oldmask;
5 kx
5 kx . . .
5 kx
5 kx /* Set up the mask of signals to temporarily block. */
5 kx sigemptyset(&mask);
5 kx sigaddset(&mask, SIGCHLD);
5 kx sigaddset(&mask, SIGHUP);
5 kx sigaddset(&mask, SIGALRM);
5 kx
5 kx . . .
5 kx
5 kx for (;;) {
5 kx int n, ctrl = -1;
5 kx fd_set readable;
5 kx
5 kx if (nsock == 0) {
5 kx (void) sigprocmask(SIG_BLOCK, &mask, &oldmask);
5 kx while (nsock == 0)
5 kx sigsuspend(&oldmask);
5 kx (void) sigprocmask(SIG_UNBLOCK, &mask, NULL);
5 kx }
5 kx
5 kx * end */