如何解决ios SIGPIPE 导致的崩溃
来源:互联网 发布:ipad打开淘宝老是跳转 编辑:程序博客网 时间:2024/06/07 05:18
分类: 游戏开发 2014-06-06 16:00 620人阅读 评论(0)收藏 举报
在开发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));
转至 http://blog.csdn.net/ring0hx/article/details/28891121
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导致的程序退出
- hive压缩之小文件合并
- 软件项目管理经验点滴总结
- 分布式学习笔记
- 数据结构学习记录之一查找
- POJ 2431 Expedition (贪心 + 优先级队列)
- 如何解决ios SIGPIPE 导致的崩溃
- 使用Eclipse调试Java程序的10个技巧
- TNS-01189 The listener could not authenticate the user
- 三十三、RTTI(runtime type information)、dynamic_cast运算符、typeid运算符、type_info
- 浅析人脸检测之Haar分类器方法
- Sum(0606)
- 猜数字游戏(15)
- [日语学习] 稻妻
- Objective-C高级编程之内存管理(1)