2012-04-12 78 views
2

當SocketException遇到(或一個IOException異常,當你使用的BufferedReader套接字)所有,應該在整個連接被認爲是壞?是否所有SocketExceptions都是「致命的」?

如果有讀取或寫入發生,但插座仍然是可用的插座,異常時可能出現的任何「非致命」的例外,我多多少少知道。

回答

1

SocketException子類的Javadoc的彙編顯示,你無法從這樣的例外回收和再利用的插座。

  • 的BindException 信號,同時試圖將套接字綁定到本地地址和端口時發生了錯誤。通常,該端口正在使用中,或者請求的本地地址無法分配。

  • ConnectException 表示嘗試將套接字連接到遠程地址和端口時發生錯誤。通常,連接被遠程拒絕(例如,沒有進程正在監聽遠程地址/端口)。

  • 的NoRouteToHostException 信號,同時試圖將套接字連接到遠程地址和端口時發生了錯誤。通常,由於介入防火牆或中間路由器關閉,無法訪問遠程主機。

  • PortUnreachableException 信號,一個ICMP端口不可達消息已經在一個連接的數據報接收。

SocketException本身:拋出以表明底層協議中存在錯誤,例如TCP錯誤。

因此,我會說是的,沒有辦法繼續,因爲TCP已經試圖確保從傳輸問題中恢復。

+0

嗯,我明白了。謝謝你解釋說,它確實有幫助 – TheLQ 2012-04-13 01:30:42

1

我不會說SocketExceptions是致命的,但整個連接應該被認爲是不好的。雖然我完全同意堆棧器回答以前的問題,但重要的是要注意,SocketException是Exception的子元素,而不是Error。我會認爲Error的孩子是致命的,而Exceptions可以有可恢復的狀態。不幸的是,在這種情況下,可恢復狀態將是打開一個新的連接。

根據您的業務邏輯,創建一個擴展IOError(IOError extends Error)並捕獲並重新拋出IOError類而非異常如果它要求丟失套接字導致應用程序可能會很有用進入不可恢復狀態,無法合理處理。

相關問題