前言
SIGPIPE
libsystem_kernel.dylib`mach_msg_trap:
SIGPIPE.png
在xcode開(kāi)發(fā)中,有時(shí)會(huì)出現(xiàn)以下中斷:
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
這時(shí)候吓坚,點(diǎn)擊繼續(xù)運(yùn)行按鈕粉臊,app會(huì)繼續(xù)運(yùn)行箫爷,(-_-# 一開(kāi)始我以為這是xcode的某種提示舌稀,實(shí)際運(yùn)行可能不會(huì)有問(wèn)題场绿;然而實(shí)際情況是:因?yàn)榇藭r(shí)是處于調(diào)試模式剖效,所以不會(huì)閃退,但如果不是調(diào)試模式焰盗,而是release版璧尸,app就會(huì)crash異常退出)
搜索mach_msg_trap
得到如下答案:
通過(guò)xcode的提示可以知道引起中斷的原因是 signal SIGPIPE。
觸發(fā)該消息的原因一般都是某fd已經(jīng)釋放熬拒,確依然對(duì)其write導(dǎo)致的爷光。
我此處觸發(fā)的原因是對(duì)方socket已關(guān)閉,繼續(xù)寫(xiě)入導(dǎo)致梦湘。我是通過(guò)庫(kù)函數(shù)
setsockopt(client_sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int))
忽略該消息從而解決問(wèn)題瞎颗。
問(wèn)題描述:
在XCode中設(shè)置忽略signal SIGPIPE錯(cuò)誤
如何解決ios SIGPIPE 導(dǎo)致的崩潰
問(wèn)題分析:
避免SIGPIPE導(dǎo)致的iOS應(yīng)用閃退/Avoiding SIGPIPE signal crash in iOS(mach_msg_trap、SIGPIPE信號(hào))
問(wèn)題解決:
iOS崩潰異常捕獲(評(píng)論中有demo):這邊文章的評(píng)論也記得順便看下
[iOS]使用signal讓app能夠在從容崩潰
Signal 13 was raised
iOS應(yīng)用收到Signal 13 was raised的崩潰信息捌议,是什么引起的
Signal 13 was raised(SIGPIPE管道破裂)
Socket is not connected
Error: received error: [57] Socket is not connected - iOS 10