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;