2014-11-04 130 views
2

我一直在想這個很長一段時間,我一直乖乖地被捕捉任何可能出現的異常,調用ServerSocket.close()可能拋出。但是,我從來沒有見過它拋出異常。ServerSocket.close()。它什麼時候拋出異常?

Javadocs狀態:

Throws: 
    IOException - if an I/O error occurs when closing the socket. 

然而,正如我說的,我從來沒有見過它拋出一個異常。在什麼情況下關閉serversocket時發生I/O錯誤?你可以假設手頭的代碼如下所示:

public void terminate() { 
    try { 
     serverSocket.close(); 
    } catch (IOException ex) { 
     System.err.println(ex.getMessage()); // when and how? 
    } 
} 

我已經在網上搜索一個答案,但無法拿出任何會澄清這一點。如果當您嘗試關閉套接字已關閉

+0

@OlaviMustanoja這真的取決於實現。有許多套接字實現,它們可能都有獨立的錯誤。此外,IOException相當廣泛,似乎更像是實現拋出任何基於I/O的錯誤並使其正確處理的方式。 – Obicere 2014-11-04 02:42:15

+0

@Obicere我明白這一點。我問的是,什麼時候ServerSocket.close()拋出IOException?我不關心其他許多實現。 – 2014-11-04 02:44:01

+0

@OlaviMustanoja恰好在指定時。毫不誇張地說:'IOException - 如果關閉此socket.'它確實依賴於'SocketImpl' – Obicere 2014-11-04 02:46:13

回答

3

IOException會被拋出。

+0

無法確認此行爲:調用兩次socket.close()不__ throw(java8)。 – Heri 2016-11-29 09:37:45

相關問題