2012-04-03 21 views

回答

1

準確行爲可能依賴於底層的操作系統,但一般而言,您應得到一個錯誤,即write將返回-1並設置errno(以ECONNRESET例如)。

+0

我剛剛在我的linux機器上測試過它,它返回的值大於0! (即它認爲它寫的字符數) – 2012-04-03 22:12:36

+0

能夠至少再寫一次是正常的;在某些情況下你可以得到更多。在舊的BSD系統上,只連接到我自己的本地機器上,我得到一個成功的寫入,後面跟着一個-1,errno設置爲「EPIPE」。在更現代化的Linux機器上,我可以得到同樣的結果。這是因爲發送者需要額外的一次TCP往返才能「看到」接收者已經消失。設置'SO_KEEPALIVE'應該會引起更早的發現,但這可能需要很長時間(RFC-1122至少說了2個小時!)。 – torek 2012-04-04 07:43:24