Linux函數accept中斷處理

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 
版權聲明:本文爲博主原創文章,轉載請附上博文連接!內存

相關文章
相關標籤/搜索