signal SIGPIPE 引起的真机闪退问题解决

前言

SIGPIPE
libsystem_kernel.dylib`mach_msg_trap:

signal SIGPIPE 引起的真机闪退问题解决_第1张图片
SIGPIPE.png

在xcode开发中,有时会出现以下中断:

libsystem_kernel.dylib`mach_msg_trap:
    0x18b76d180 <+0>: mov    x16, #-0x1f
    0x18b76d184 <+4>: svc    #0x80
->  0x18b76d188 <+8>: ret    

[] nw_socket_get_input_frames recvmsg(fd 17, 1024 bytes): [57] Socket is not connected

这时候,点击继续运行按钮,app会继续运行,(-_-# 一开始我以为这是xcode的某种提示,实际运行可能不会有问题;然而实际情况是:因为此时是处于调试模式,所以不会闪退,但如果不是调试模式,而是release版,app就会crash异常退出)

搜索mach_msg_trap得到如下答案:

通过xcode的提示可以知道引起中断的原因是 signal SIGPIPE。
触发该消息的原因一般都是某fd已经释放,确依然对其write导致的。
我此处触发的原因是对方socket已关闭,继续写入导致。我是通过库函数
setsockopt(client_sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int))
忽略该消息从而解决问题。

问题描述:
在XCode中设置忽略signal SIGPIPE错误
如何解决ios SIGPIPE 导致的崩溃

问题分析:
避免SIGPIPE导致的iOS应用闪退/Avoiding SIGPIPE signal crash in iOS(mach_msg_trap、SIGPIPE信号)

问题解决:
iOS崩溃异常捕获(评论中有demo):这边文章的评论也记得顺便看下
[iOS]使用signal让app能够在从容崩溃

Signal 13 was raised

iOS应用收到Signal 13 was raised的崩溃信息,是什么引起的
Signal 13 was raised(SIGPIPE管道破裂)

Socket is not connected

Error: received error: [57] Socket is not connected - iOS 10

你可能感兴趣的:(signal SIGPIPE 引起的真机闪退问题解决)