【问题标题】:SIGINT(ctrl+c) doesn't interrupt accept callSIGINT(ctrl+c) 不会中断接受调用
【发布时间】:2013-03-25 14:34:05
【问题描述】:

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

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

【问题讨论】:

    标签: c sockets unix signals


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2011-11-22
      • 2012-12-25
      • 2011-06-30
      相关资源
      最近更新 更多