码迷,mamicode.com
首页 > 其他好文 > 详细

singal

时间:2014-07-16 21:12:33      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:blog   使用   数据   问题   re   div   

singal(SIGPIPE, SIG_IN)

 

一般情况,当捕获到SIGPIPE信号时,进程会被终止,当设置SIG_IN时,表明会忽略SIGPIPE信号

使用libevent编写websocket服务端时遇到了一个问题:

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

 

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

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

 

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

  

singal,布布扣,bubuko.com

singal

标签:blog   使用   数据   问题   re   div   

原文地址:http://www.cnblogs.com/jsy306/p/3836172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!