最近在做伺服器的時候,碰到了程式異常終止的問題,困擾了我近乙個星期的時間 ,排除了很多重可能性,終於找到原因了,記錄下,以免忘記。
當server端關閉乙個socket連線時,如果client端繼續傳送資料,系統會發出乙個sigpipe訊號給程序,通知程序這個連線已經斷開,不應該再傳送資料。而linux系統的預設處理規則是對sigpipe訊號執行terminate(終止、退出)處理,所以client端程式會異常退出,為了避免這種情況發生,可以將sigpipe設為sig_ign。
signal(sigpipe, sig_ign);
這裡其實是因為server端因為等待超時而關閉了連線,但是client端卻不知道仍然在繼續傳送訊息,最終導致了程式停止
參考:
執行緒異常終止
trycatch exception e finally 釋放資源 有人可能覺得 exception 有些大了,實際不然,因為你也不知道會丟擲什麼異常。被0除,numberformatexception,是一些不是必須捕獲的異常,遇到這些異常不處理會造成一些不必要的麻繁。為了執行緒不會被這些異常終止...
TCP異常終止分析
tcp異常終止 reset報文 tcp的異常終止是相對於正常釋放tcp連線的過程而言的,我們都知道,tcp連線的建立是通過三次握手完成的,而tcp正常釋放連線是通過四次揮手來完成,但是有些情況下,tcp在互動的過程中會出現一些意想不到的情況,導致tcp無法按照正常的四次揮手來釋放連線,如果此時不通過...
python 終止程式
有時當乙個條件成立的情況下,需要終止程式,可以使用sys.exit 退出程式。sys.exit 會引發乙個異常 1.如果這個異常沒有 獲,那麼python編譯器將會退出,後面的程式將不會執行。2.如果這個異常 獲 try.except.finally 捕獲這個異常可以做一些額外的清理工作,後面的程式...