1 背景编程
在Linux socket编程中(相似于《Linux socket编程案例》),服务器使用accept()阻塞模式等待客户端链接,在等待过程当中,使用Ctrl+C来中断程序(产生SIGINT信号)。因为但愿中断后先进行一些清理操做(例如释放内存)再退出程序,使用signal函数来捕获了SIGINT信号:服务器
signal(SIGINT, App_exit);
说明:App_exit()是自定义的函数,在其中作函数退出清理操做:
static void App_exit(int signo)
{
...
if ( socket_fd != -1) {
close( socket_fd );
socket_fd = -1;
}
...
}
因为accept()函数使用到socket_fd,而且正在阻塞。因此关闭socket_fd以后出现错误:socket
Bad file descriptor
Segmentation fault (core dumped)
2 解决方法
在App_exit()中作清理操做以后,就要结束程序,再也不返回到被中断处。在App_exit()中的末尾添加_exit()函数便可。函数
_exit(0);
参考资料.net
[1]关于accept被信号中断的问题线程
[2]C++中如何停止acceptblog
[3]Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理进程
[4]中断被Socket.Accept阻塞的线程ip
[5]如何中断阻塞方式accept调用
---------------------
做者:OneSea-V3.0
来源:CSDN
原文:https://blog.csdn.net/Q1302182594/article/details/46647413
版权声明:本文为博主原创文章,转载请附上博文连接!内存