Kra*_*rab 3 c unix sockets signals
在无限循环中,我接受新的连接,但我需要选择停止该服务器,所以我想使用ctrl + c(SIGINT).当我按下它时,它会调用我的信号处理程序,但它不会中断接受调用,因此不会评估是否中断为真(当没有客户端连接时,因此接受阻塞很长时间).
sig_atomic_t interrupt;
.
.
.
signal(SIGINT, sigintHandler);
.
.
.
while(!interrupt) {
server.accept();
}
.
.
.
void sigintHandler(int param) {
interrupt = 1;
}
Run Code Online (Sandbox Code Playgroud)
您的操作系统在使用SA_RESTART时默认使用语义signal().您应该能够在手册页中确认这一点.由于您不希望发生这种情况,因此请使用sigaction()设置处理程序并省略该SA_RESTART标志.