繁体   English   中英

SIGINT(ctrl + c)不会中断接受呼叫

[英]SIGINT(ctrl+c) doesn't interrupt accept call

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

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

使用signal()时,默认情况下,您的操作系统使用SA_RESTART语义。 您应该能够在手册页中对此进行确认。 由于您不希望发生这种情况,因此请使用sigaction()设置处理程序,并忽略SA_RESTART标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM