在app运行过程中按下home键或者其他原因app被挂起,socket连接不会断开,服务器为了节省资源,在一段时间后会主动关闭这个连接。当玩家再次切回到游戏后,前端并不知道这个连接已经断开了,继续通过断开的socket发送消息,这时候send函数会触发SIGPIPE异常导致程序崩溃。解决这个问题我们...
分类:
其他好文 时间:
2015-07-27 11:01:40
阅读次数:
163
我写socket相关的程序也不是一天两天了,在我的记忆中,只要处理好recv(或read)的返回值中0三种情况,程序便不会有什么问题。但最近在看公司的源代码时,发现代码中直接将SIGPIPE设置为SIG_IGN。而且附上一段注释:往一个已经关闭的socket写入数据会触发SIGPIPE。我心中顿.....
分类:
其他好文 时间:
2015-06-14 18:13:13
阅读次数:
204
看到很多网络程序都有一段忽略SIGPIPE信号的处理,故总结一下。第一次对其disconnected socket调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送). 但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不...
分类:
其他好文 时间:
2015-05-20 22:14:26
阅读次数:
753
PS: 如果服务器程序不忽略SIGPIPE,在某些时候TCP writer收到这个信号,会导致进程退出The rule that applies is: When a process writes to a socket that has received an RST, the SIGPIPE s...
分类:
其他好文 时间:
2015-05-14 17:53:24
阅读次数:
218
AudioFlinger(AF)是一个服务,具体的代码在av\media\mediaserver\Main_mediaserver.cpp中: int main(int argc, char** argv)
{ signal(SIGPIPE, SIG_IGN); char value[PROPERT...
分类:
移动开发 时间:
2014-12-26 16:38:10
阅读次数:
294
在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:signal...
分类:
其他好文 时间:
2014-10-27 22:35:27
阅读次数:
156
1,SIGPIPE信号:在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SI...
分类:
系统相关 时间:
2014-10-26 09:05:58
阅读次数:
221
linux编程下signal()函数当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默...
分类:
系统相关 时间:
2014-10-24 18:47:43
阅读次数:
284
signal(SIGPIPE, SIG_IGN) (转)signal(SIGPIPE, SIG_IGN) 当服务器close一个连接时,若client端接着发数据。根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这....
分类:
其他好文 时间:
2014-10-24 18:29:40
阅读次数:
171
signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);signal(SIGCHLD, SIG_IGN);因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给in....
分类:
其他好文 时间:
2014-10-24 18:24:50
阅读次数:
176