SIGPIPE的默认行为是终止进程,在命令行程序中这是合理的[插图],但是在网络编程中,这意味着如果对方断开连接而本地继续写入的话,会造成服务进程意外退出。
所以一般需要设置一下,使得本进程在写入一个已经关闭的socket的时候不会异常 退出
#pragma GCC diagnostic ignored "-Wold-style-cast"
class IgnoreSigPipe
{
public:
IgnoreSigPipe()
{
::signal(SIGPIPE, SIG_IGN);
// LOG_TRACE << "Ignore SIGPIPE";
}
};
#pragma GCC diagnostic error "-Wold-style-cast"
IgnoreSigPipe initObj;
No comments yet.