如何解决ios SIGPIPE 导致的崩溃
来源:互联网 发布:小米网络助手在哪里 编辑:程序博客网 时间:2024/06/07 04:46
http://blog.csdn.net/ring0hx/article/details/28891121
在开发ios长连接游戏的过程中遇到一个问题:在游戏运行过程中玩家按下home键或者其他原因游戏被挂起,socket连接不会断开,服务器为了节省资源,在一段时间后会主动关闭这个连接。当玩家再次切回到游戏后,前端并不知道这个连接已经断开了,继续通过断开的socket发送消息,这时候send函数会触发SIGPIPE异常导致程序崩溃。
解决这个问题我们需要在send的时候检测到服务器已经关闭连接,进行重新连接。正常情况下send函数返回-1表示发送失败,但是在IOS上SIGPIPE在send返回之前就终止了进程,所以我们需要忽略SIGPIPE,让send正常返回-1,然后重新连接服务器。
查阅资料后找到了两个方法:
1) 使用 signal(SIGPIPE, SIG_IGN) 忽略SIGPIPE。经实验在ios7模拟器上虽然xcode还是会捕获SIGPIPE,但是程序不会崩溃,继续后可以执行。但是在真机上依然会崩溃。
2) 使用 SO_NOSIGPIPE。 经实验在多个ios版本下都不再触发SIGPIPE,完美解决问题。
- int set = 1;
- setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
版权声明:本文为博主原创文章,未经博主允许不得转载
0 0
- 如何解决ios SIGPIPE 导致的崩溃
- 如何解决ios SIGPIPE 导致的崩溃
- 如何解决ios SIGPIPE 导致的崩溃
- 如何解决ios SIGPIPE 导致的崩溃
- SIGPIPE信号导致的进程崩溃
- 如何在 iOS 上避免 SIGPIPE 信号导致的 crash (Avoiding SIGPIPE signal crash in iOS)
- ios崩溃的解决
- SIGPIPE导致的程序退出
- SIGPIPE导致的程序退出
- SIGPIPE导致的程序退出
- iOS中解决后台返回的null导致的崩溃问题
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- android和ios sigpipe信号导致程序异常退出的问题
- 关于SIGPIPE导致的程序退出
- 关于SIGPIPE导致的程序退出
- 转载: 关于SIGPIPE导致的程序退出
- 关于SIGPIPE导致的程序退出
- Vim 自动显示行号 高亮 缩进
- Java Socket编程
- hdu 5334 多校(4)
- java-Dom创建和解析xml
- ios--c DAY_6
- 如何解决ios SIGPIPE 导致的崩溃
- 【公开课:Java开源框架服务及CEP深入剖析】直播QQ群:228977971
- XCode6.3编写swift+OC引入含C++的库时的问题
- mysql学习
- UI_Stepper
- 鼠标悬停,图片变色
- Spark中hash-based 和 sort-based的对比分析
- windows 装mac系统
- openstack相关