linux 中断 添加处理函数,Linux函数accept中断处理

本文探讨了在Linux Socket编程中,如何优雅地处理接受连接时被SIGINT信号中断的情况。作者分享了解决方案,包括使用signal捕获SIGINT,确保在App_exit函数中完成内存清理并最终通过_exit()退出,避免了socket_fd错误。
摘要由CSDN通过智能技术生成

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

版权声明:本文为博主原创文章,转载请附上博文连接!内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值