過的Winsock套接字發送數據後,你應該關閉這樣的連接:我需要關閉套接字嗎?
closesocket(ConnectSocket);
WSACleanup();
我正在寫通過套接字發送數據的API。如果非要之後關閉套接字,我需要的功能添加到API,這樣,當他們完成獲取數據的用戶可以說。爲了方便起見,如果我不關閉套接字,是否有問題?
過的Winsock套接字發送數據後,你應該關閉這樣的連接:我需要關閉套接字嗎?
closesocket(ConnectSocket);
WSACleanup();
我正在寫通過套接字發送數據的API。如果非要之後關閉套接字,我需要的功能添加到API,這樣,當他們完成獲取數據的用戶可以說。爲了方便起見,如果我不關閉套接字,是否有問題?
這種或那種方式,如果你不關閉套接字,你的程序會泄漏文件描述符。程序通常只能打開文件描述符的數量有限,所以如果這種情況發生了很多,它可以變成一個問題。
如果套接字綁定到一個地址,沒有其他的插座就能直到關閉套接字綁定到相同的地址。如果它綁定到一個衆所周知的端口(例如25或80),這將阻止任何其他綁定到該端口......這可能是您可能面臨的最嚴重的問題。如果它綁定到一個臨時端口,這是不是很重要,但是,仍然有端口的數量有限,而且如果發生這種情況很多,那麼你可能會耗盡。請注意,UDP套接字可以自由使用而不受限制,所以這個問題可能不適用於UDP套接字。
如果套接字是偵聽套接字(已調用listen()
),則系統將繼續接受此套接字上的連接(如果不關閉它)(但僅限於達到listen()
中指定的積壓限制)。
如果套接字是TCP套接字並且已連接,則TCP連接將不會關閉,除非套接字已關閉或調用shutdown()
。因此,在這種情況下,你至少應該確保調用shutdown()
如果無法關閉套接字。
總之,不關閉套接字可能會導致幾個或多或少重要的問題。一般來說,TCP可能會比UDP更多地出現問題。如果可能的話,你應該關閉套接字!