如何解决ios SIGPIPE 导致的崩溃
来源:互联网 发布:淘宝刷手一天真实收入 编辑:程序博客网 时间:2024/06/06 20:17
在开发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));
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导致的程序退出
- react + redux 完整的项目
- Python学习笔记(五)—— Slicing
- 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索
- 常用的Hql语句
- Android dp、sp 转换为 px 的工具类
- 如何解决ios SIGPIPE 导致的崩溃
- C++:函数指针
- RedHat下安装Mysql及字符集配置
- 【正解】Openjudge 至少有多少只恼人的大青蛙 (dfs 剪枝 好题)
- 2017年最流行的15个数据科学Python库
- uefi driver
- 学习博客
- 关于运算符(三目运算符)和运算过程中的优先关系
- 第三方模块的手动安装