SIGPIPE信号

转载 2013年12月03日 16:23:25
使用libevent编写websocket服务端时遇到了一个问题:

浏览器与服务端建立连接后,若刷新或关闭浏览器窗口(未监听相应事件并处理),服务端无法得知连接断开,按理说,这种情况属于client异常终止,跟拔网线的情况类似。这种情况下,服务端不知情,仍保留此连接,仍按照既定逻辑向client写数据,写了两次后,服务端程序终止(多次测试,均是第2次后终止),不是崩溃,是异常终止,非常不解。

问了一位很有经验的同事,得知是SIGPIPE信号导致程序终止。

查了相关资料,大致明白:连接建立,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应,此后再写数据,内核将向进程发出SIGPIPE信号,通知进程此连接已经断开。而SIGPIPE信号的默认处理是终止程序,导致上述问题的发生。

为避免这种情况,可以选择忽略SIGPIPE信号,不执行任何动作。

#include <signal.h>
//SIGPIPE ignore
struct sigaction act;

act.sa_handler = SIG_IGN;

if (sigaction(SIGPIPE, &act, NULL) == 0) {
    LOG("SIGPIPE ignore");

}


转载请注明出处 http://www.cnblogs.com/caosiyang/archive/2012/07/19/2599071.html

socket中的SIGPIPE信号问题

网上查资料,找到原因,网络连接socket建立后,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应, 此后再写数据,kernel将向进程发出SIGPIPE信号,通知进程此连接已...
  • skyflying2012
  • skyflying2012
  • 2014年09月22日 14:33
  • 3159

【整理】服务器忽略SIGPIPE信号原因及方法

1.原因对一个对端已经关闭的socket调用两次write,第二次将会生成SIGPIPE信号, 该信号默认结束进程。具体的分析可以结合TCP关闭的”四次握手”。TCP是全双工的信道, 可以看作两条单工...
  • yockie
  • yockie
  • 2016年08月10日 21:03
  • 1118

socket编程中对sigpipe信号的处理

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的socket...
  • myd620
  • myd620
  • 2015年08月20日 12:45
  • 930

对SIGPIPE等软中断信号的处理方式

处理信号有三种类型:进程接收到信号后退出;进程忽略该信号;进程收到信号后执行用户设定用系统调用signal的函数。 一、进程接收到信号后退出,一般是系统默认的处理方式。 二、...
  • Season_hangzhou
  • Season_hangzhou
  • 2014年07月04日 15:39
  • 1347

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的socket...
  • a_tu_
  • a_tu_
  • 2015年06月18日 13:59
  • 434

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的so...
  • jackgo163
  • jackgo163
  • 2016年01月07日 17:16
  • 91

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的so...
  • heyustudent
  • heyustudent
  • 2014年05月07日 16:21
  • 499

关于SIGPIPE信号

感谢原作者,春暖花会开 我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件. 最后问...
  • lovenanforever
  • lovenanforever
  • 2013年07月29日 09:43
  • 580

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的so...
  • changli_90
  • changli_90
  • 2013年05月14日 17:24
  • 376

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件. 最后问题确定为, 对一个对端已经关闭的socket...
  • oSherryLee
  • oSherryLee
  • 2013年05月14日 10:24
  • 616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SIGPIPE信号
举报原因:
原因补充:

(最多只允许输入30个字)