Linux函数accept中断处理

来源:互联网 发布:美工课小房子教案 编辑:程序博客网 时间:2024/06/05 01:38

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之后出现错误:

Bad file descriptorSegmentation fault (core dumped)

2 解决方法

    在App_exit()中做清理操作之后,就要结束程序,不再返回到被中断处。在App_exit()中的末尾添加_exit()函数即可。

_exit(0);

参考资料

[1]关于accept被信号中断的问题

[2]C++中如何中止accept

[3]Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理

[4]中断被Socket.Accept阻塞的线程

[5]如何中断阻塞方式accept调用

如何中断阻塞方式accept调用

0 0
原创粉丝点击