4

在无限循环中,我正在接受新连接,但我需要选择停止该服务器,所以我想使用 ctrl+c (SIGINT)。当我按下它时,它会调用我的信号处理程序,但它不会中断接受调用,因此不会评估中断是否为真的检查(当没有客户端连接时,接受会长时间阻塞)。

sig_atomic_t interrupt;
.
.
.
signal(SIGINT, sigintHandler);
.
.
.
while(!interrupt) {
  server.accept();
}
.
.
.
void sigintHandler(int param) {
    interrupt = 1;
}
4

1 回答 1

7

SA_RESTART默认情况下,您的操作系统在使用signal(). 您应该能够在手册页中确认这一点。由于您不希望发生这种情况,请使用sigaction()设置处理程序并省略SA_RESTART标志。

于 2013-03-25T14:55:32.997 回答