关于iOS开发中遇到的“libsystem_kernel.dylib`semaphore_wait_trap/”错误的相关技术

关于iOS开发中遇到的“libsystem_kernel.dylib`semaphore_wait_trap:”错误的相关技术文章

错误介绍:我是在项目中使用到了socket相关通信技术,当正常使用打开都没有问题,只有当按电源键锁屏后,点击推送消息的时候,进入app时,白屏然后闪退,Xcode跟踪错误日志,显示的错误信息如下:

在日志输出端口,输入bt,回车,如下:

显示错误原因是:signal SIGPIPE

解释如下:

socket管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读取管道没有打开或者意外终止就往管道里面写,写进程就会收到SIGPIPE信号。此外用socket通信的两个进程,写进程在写socket的时候,读进程已经终止。

我们需要在send的时候检测到服务器已经关闭连接,进行重新连接。正常情况下send函数返回-1表示发送失败,但是在IOS上SIGPIPE在send返回之前就终止了进程,所以我们需要忽略SIGPIPE,让send正常返回-1,然后重新连接服务器。

解决BUG代码如下:

在main.m文件中,写上:

就OK了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容