2013-05-01 74 views

回答

1

是的,你仍然需要關閉它。即使遠程主機已關閉連接,您的機器上仍存在句柄。

您仍然可以參考插座(調用各種方法,它包括read()即使連接本身是封閉的。你叫close()手柄已完全消失後,所以調用方法更容易造成分段錯誤不是簡單地返回0。

要清楚。調用close()具有兩個動作。

  1. 它發送apropriate分組(一個或多個)來告訴遠程主機,該插座已關閉。
  2. 它清理內存associ吃了那個插座。

因此,即使遠程主機關閉了套接字,您仍然需要接近清理內存。

+0

因此,當服務器關閉連接時,內核中仍有一些狀態仍然存在於客戶端中。那麼,當客戶端調用close時,FIN是否發送給服務器?如果是,那麼即使服務器需要爲該tcp連接保留一些狀態,直到客戶端調用關閉。 – 0xhacker 2013-05-01 15:33:02

+0

是的,如果套接字在遠程主機關閉連接時被破壞,則後續調用會向操作系統請求不存在的東西,並且會使應用程序崩潰。因此,即使連接消失,「套接字」也必須存在,直到本地應用程序調用close()。連接一直存在,直到本地應用程序或遠程應用程序調用close()或其他超時發生。 – 2013-05-01 15:41:41

+0

使用封閉的套接字*返回一個錯誤代碼。*它不會導致分段違規或程序崩潰。 – EJP 2013-05-01 22:51:02

相關問題