前言
SIGPIPE
libsystem_kernel.dylib`mach_msg_trap:
在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