首页 > 代码库 > linux C++ 网络通信 -- Broken pipe,接收端突然断开,发送没收到,仍然发送消息,会导致进程崩溃
linux C++ 网络通信 -- Broken pipe,接收端突然断开,发送没收到,仍然发送消息,会导致进程崩溃
最近做C++ 服务器时,两个服务器之间通信时,一个是logserver , 一个是gameserver ,gameserver 定时向logserver 发心跳包(也就是 logserver 相当于server , gameserver 相当于client),突然断开logserver ,就相当于服务器崩溃了,客户端不知道,仍旧照常发数据,但是相应的连接不存在,gameserver 就会报 Broken pipe 的错误,之后,进程也崩溃了。
当然进程崩溃,是做服务器最不愿意看到的事情,所以,尽管logserver 断开了,gameserver 还得正常跑,不能崩掉,网上查了一下,找到了解决办法,记录下
加一个信号处理函数,发送信息时是个无效的连接,就会触发SIGPIPE 信号,默认的是关闭进程,所以 自己再写信号处理函数,不让进程关闭就没事
signal(SIGPIPE, handle_test);
对应的信号处理函数
static void handle_test(int sig) { close(iLogserverFd); cout << "logserver has close ===>" << endl; iLogserverFd = 0; }
iLogserverFd 就是与logserver 对应的连接
再发送消息时,如果判断 iLogserverFd = 0 时就不会再发送,这样就达到了目的
linux C++ 网络通信 -- Broken pipe,接收端突然断开,发送没收到,仍然发送消息,会导致进程崩溃
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。