linux下进程接收到SIGPIPE信号问题
向一个socket写入东西,结果收到SIGPIPE,导致我的程序中断
查到一篇文章,说有如下处理方法:
在初始化时调用signal(SIGPIPE,SIG_IGN)忽略该信号(只需一次)
我不明白的是,初始化指的是什么初始化?
我在main ()开头就加上了signal(SIGPIPE,SIG_IGN);行不行?能够忽略SIGPIPE信号吗?
谢谢
[解决办法]
在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。
这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction( SIGPIPE, &sa, 0 );
[解决办法]
楼上正解.
signal设置的信号句柄只能起一次作用,信号被捕获一次后,信号句柄就会被还原成默认值了.
sigaction设置的信号句柄,可以一直有效,值到你再次改变它的设置.
不知道你在读取失败时会怎么处理的,我觉得仅仅忽略它不是太好.这具体要看你是怎么处理了.
[解决办法]
在初始化时调用
[解决办法]
你自己试试
[解决办法]
路过,已经解决了,就啥也不说了
[解决办法]
mark