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

IOS下捕获异常并生成异常堆栈日志

在appDidFinishLaunching函数中添加: NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);...

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

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

iOS崩溃 捕获异常处理

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

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

//处理信号类型的异常 void SignalExceptionHandler(int signal) {          NSMutableString *mstr = [[NSMutab...

signal(SIGPIPE, SIG_IGN);

TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道,  但本端只是收到FIN包.  按照TCP协议的语义, 表...

Signal 13 was raised(SIGPIPE管道破裂)

管道另一端没有进程接收数据,导致管道破裂而崩溃。 socket或管道,当自己主动关闭,资源被苹果系统回收,对方关闭时,当再次通过socket或pipe的文件描述符发送消息会出现系统级别的崩溃(管道破裂...

如何解决ios SIGPIPE 导致的崩溃

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

signal(SIGPIPE, SIG_IGN)

signal(SIGPIPE, SIG_IGN)   2012-03-19 16:29:52|  分类: HaierUbic|字号 订阅 当服务器close一个...

signal函数中的SIGPIPE

在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 开发中 SIGPIPE信号的分析跟处理
举报原因:
原因补充:

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