Socket

當程序死於段錯誤時,套接字會發生什麼?

  • November 27, 2021

想像一下,我有一個伺服器,它有一個與遠端客戶端連接的 tcp 套接字。如果伺服器因段錯誤而當機,作業系統是否會關閉套接字並通過 RST 通知客戶端,或者客戶端永遠不會知道並且套接字在客戶端和伺服器電腦上保持打開狀態?

如果程序在調試器中並且出現段錯誤,或者如果它擷取了段錯誤信號,則從技術上講,它不會死亡,並且套接字不會立即發生任何事情。

但是,如果程序真的死掉了,段錯誤情況並不是特別特殊,套接字的一端會關閉,就像程序以任何其他方式退出時一樣,類似於 shutdown(2) 系統呼叫。

如果任何數據在套接字的核心緩衝區中,它將被允​​許耗盡。(但是,STDIO 緩衝區中未寫入的數據可能會失去。)套接字的遠端端在讀取最後一個數據後會看到一個 EOF,如果它試圖寫入套接字,它將收到一個 SIGPIPE 信號。

引用自:https://unix.stackexchange.com/questions/679257