IOS开发——Xcode调试SIGPIPE信号解决办法

来源:互联网 发布:兄弟连php视频 百度云 编辑:程序博客网 时间:2024/05/29 12:35

一、相关概念

首先说明一下SIGPIPE的含义:向无读者的PIPE写数据。这句话相当拗口,形象点表达就是:

一个程序调用send函数向服务器发送数据,在这个过程中,服务器接受数据的服务突然挂掉了,那么这个程序的send函数发送的数据就没有了接收者,因此内核就会向该程序发送SIGPIPE信号。 

 

二、解决方案

Ios开发在使用Xcode调试时,signal(SIGPIPE,SIG_IGN);等对信号的操作是无效的;

遇到该问题有两个解决方案:

1、  不适用Xcode调试;

2、  修改send函数的socket属性,用setopt()增加socket属性SO_NOSIGPIPE;

 

三、叨叨

之前在调试ios应用时出现了一个bug,即向服务器回传视频流时,服务器因为负荷过重可能会自动重启,因此我的应用使用send函数发送数据经常会出现发送失败。而在Xcode上调试,一发送失败进程就会收到SIGPIPE而被终止。即便在main函数添加了signal(SIGPIPE, SIG_IGN);进程依旧会因为收到SIGPIPE而终止;涉及到通信,大家都觉得自己的服务/应用没有问题,此问题至少花了3小时。

当然,当时服务器也确实有点问题,负载100%,根本处理不过来发过去的视频流。

         

0 0
原创粉丝点击