關(guān)于iOS開發(fā)中遇到的“l(fā)ibsystem_kernel.dylib`semaphore_wait_trap:”錯誤的相關(guān)技術(shù)文章
錯誤介紹:我是在項目中使用到了socket相關(guān)通信技術(shù),當(dāng)正常使用打開都沒有問題传惠,只有當(dāng)按電源鍵鎖屏后银舱,點擊推送消息的時候灌曙,進(jìn)入app時杖刷,白屏然后閃退竹勉,Xcode跟蹤錯誤日志,顯示的錯誤信息如下:
在日志輸出端口肿嘲,輸入bt融击,回車,如下:
顯示錯誤原因是:signal SIGPIPE
解釋如下:
socket管道破裂雳窟。這個信號通常在進(jìn)程間通信產(chǎn)生砚嘴,比如采用FIFO(管道)通信的兩個進(jìn)程,讀取管道沒有打開或者意外終止就往管道里面寫涩拙,寫進(jìn)程就會收到SIGPIPE信號际长。此外用socket通信的兩個進(jìn)程,寫進(jìn)程在寫socket的時候兴泥,讀進(jìn)程已經(jīng)終止工育。
我們需要在send的時候檢測到服務(wù)器已經(jīng)關(guān)閉連接,進(jìn)行重新連接。正常情況下send函數(shù)返回-1表示發(fā)送失敗搓彻,但是在IOS上SIGPIPE在send返回之前就終止了進(jìn)程,所以我們需要忽略SIGPIPE,讓send正常返回-1,然后重新連接服務(wù)器如绸。
解決BUG代碼如下:
在main.m文件中嘱朽,寫上:
就OK了。