c - SIGINT(ctrl+c) 不中断接受调用

标签 c sockets unix signals

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

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

最佳答案

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

关于c - SIGINT(ctrl+c) 不中断接受调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617562/

相关文章:

linux - 如何在awk中解析单词?

c - 为什么我的二维数组只打印出一个值?

c++ - 在不同的 GPU 上初始化结构

c - 基于 epoll 的服务器中的空闲连接超时

iphone - 在iPhone上接收UDP数据包

linux - 我如何在 Unix 中使用基本的 grep 命令?

c - void * function(void * argument),如何返回函数结果?

c - Linux 中的终端屏幕快捷方式

c - 使用套接字在qt中支持多客户端的服务器设计

macos - 如何更改Mac终端中的文本颜色和背景?