iOS 开发中 SIGPIPE信号的分析跟处理

原创 2015年07月09日 21:53:15

    以下内容部分来自网络搜集。本人综合总结得到本博客内容,以作以后翻阅之需。

signal 13 对应就是 SIGPIPE ,网上对与这个Signal 的解释是这样的:

 管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。


网上了解到的情况是使用socket的时候一般都会收到这个SIGPIPE 信号,处理方法大部分都是忽略。


我们需要在send的时候检测到服务器已经关闭连接,进行重新连接。正常情况下send函数返回-1表示发送失败,但是在IOSSIGPIPEsend返回之前就终止了进程,所以我们需要忽略SIGPIPE,让send正常返回-1,然后重新连接服务器。


解决办法一般有3个 

 1 。是 自己设置handle处理函数

 2 。是直接调用 signal(SIGPIPE, SIG_IGN)  或者 

 struct sigaction sa;

sa.sa_handler = SIG_IGN;

sigaction( SIGPIPE, &sa, 0 );

  来忽略这个 信号。

3.   socket 忽略 SIGPIPE

 int set = 1;  

  1. setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));  

Linux下忽略信号SIGPIPE的方法

最近为测试自己写好的一个服务器,zi
  • woxiaozhi
  • woxiaozhi
  • 2014年10月30日 18:55
  • 8974

ios 收集crash xcode 调试 捕捉signal信号

//处理信号类型的异常 void SignalExceptionHandler(int signal) {          NSMutableString *mstr = [[NSMutab...
  • ssyyjj88
  • ssyyjj88
  • 2017年06月20日 11:54
  • 591

iOS崩溃 捕获异常处理

网上基本使用的都是同一个版本的异常捕获,我能了解到的关于signal异常捕获的方法也是通过这个版本。我在自己理解的基础上对于这个版本进行了一些修改,也添加了一些注释。下面贴出主要的代码。    完整...
  • u012963325
  • u012963325
  • 2016年07月27日 16:47
  • 1457

如何解决ios SIGPIPE 导致的崩溃

在开发ios长连接游戏的过程中遇到一个问题:在游戏运行过程中玩家按下home键或者其他原因游戏被挂起,socket连接不会断开,服务器为了节省资源,在一段时间后会主动关闭这个连接。当玩家再次切回到游戏...
  • ring0hx
  • ring0hx
  • 2014年06月06日 16:00
  • 9642

android和iOS平台的崩溃捕获和收集

通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助。本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开...
  • langresser
  • langresser
  • 2012年12月12日 22:11
  • 31858

在XCode中设置忽略signal SIGPIPE错误

一、在工作中遇到的问题当我利用XCode中的Instrument对我的app做自动化测试的时候,有时候会发生app的crash,这种crash的原因是signal SIGPIPE错误。这种错误就能够引...
  • Smiling8866
  • Smiling8866
  • 2016年06月22日 18:17
  • 1081

[iOS编程-XCode Debug忽略SIGPIPE信号

在使用socket的send函数时,如果此时服务器断开连接,socket将会收到broken pipe的错误。我们可以判断类似的错误来进行重连,但是在这之前系统就会发出SIGPIPE的信号,导致我们的...
  • onlyou930
  • onlyou930
  • 2013年11月14日 14:33
  • 3373

linux下管道破裂的处理

管道破裂的原因解释如下 点击打开链接 拷贝黏贴 我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是...
  • ddr77
  • ddr77
  • 2016年11月11日 10:29
  • 956

Linux编程问题—broken pipe 问题解决方法

1)broken pipe的字面意思是“管道破裂”。broken pip的原因是该管道的读端被关闭。 2)broken pipe经常发生socket关闭之后(或者其他的描述符关闭之后)的write操...
  • u010419967
  • u010419967
  • 2014年04月21日 10:53
  • 5747

Linux信号机制分析和信号处理函数

【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执...
  • zhangchaoq
  • zhangchaoq
  • 2016年04月20日 16:57
  • 1909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 开发中 SIGPIPE信号的分析跟处理
举报原因:
原因补充:

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