Linux 下的SIGPIPE信号

在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。
这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:

//忽略SIGPIPE 信号
signal(SIGPIPE,SIG_IGN);

 

如果用GDB进行调试,则
在RUN之前,加上
handle SIGPIPE nostop print


忽略SIGPIPE信号的方法

struct sigaction sa;
sa.sa_handler = SIG_IGN;//设定接受到指定信号后的动作为忽略
sa.sa_flags = 0;
if (sigemptyset(&sa.sa_mask) == -1 ||   //初始化信号集为空
    sigaction(SIGPIPE, &sa, 0) == -1) {   //屏蔽SIGPIPE信号
    perror("failed to ignore SIGPIPE; sigaction");
    exit(EXIT_FAILURE);
}

你可能感兴趣的:(Linux 下的SIGPIPE信号)