0
通過關閉連接我的意思是另一端優雅地關閉它。 我期望從write()
收到0作爲返回值,但請糾正我,如果我錯了。C - 使用signal(SIGPIPE,SIG_IGN)時write()對封閉tcp連接的影響;
通過關閉連接我的意思是另一端優雅地關閉它。 我期望從write()
收到0作爲返回值,但請糾正我,如果我錯了。C - 使用signal(SIGPIPE,SIG_IGN)時write()對封閉tcp連接的影響;
準確行爲可能依賴於底層的操作系統,但一般而言,您應得到一個錯誤,即write
將返回-1
並設置errno
(以ECONNRESET
例如)。
我剛剛在我的linux機器上測試過它,它返回的值大於0! (即它認爲它寫的字符數) – 2012-04-03 22:12:36
能夠至少再寫一次是正常的;在某些情況下你可以得到更多。在舊的BSD系統上,只連接到我自己的本地機器上,我得到一個成功的寫入,後面跟着一個-1,errno設置爲「EPIPE」。在更現代化的Linux機器上,我可以得到同樣的結果。這是因爲發送者需要額外的一次TCP往返才能「看到」接收者已經消失。設置'SO_KEEPALIVE'應該會引起更早的發現,但這可能需要很長時間(RFC-1122至少說了2個小時!)。 – torek 2012-04-04 07:43:24