在多線程應用程序中,我有一個線程從套接字連接讀取數據,直到發生讀取超時。然後設置一個關閉標誌,發送一箇中斷信號並在退出之前進行一些清理。作爲該清理的一部分,它在客戶端套接字上調用close()
。Socket.close()如何失敗(不引發異常)?
我在調試器中驗證了實際發生的close()
的調用。另外,它不會拋出異常。不過,套接字報告正在連接。我知道,因爲有另一個線程wait
爲它斷開連接。此線程稍後應重新連接它,但不會因爲調用isConnected()
不斷返回true
。
這會導致無法讀取數據以及套接字被重新清理並重新連接的情況。
如果調用Socket.close()
,有沒有什麼辦法可以默默地失敗?
當你關閉一個套接字時,它必須在兩端關閉才能完全移除。你是否在兩端調用close()? –
一旦套接字關閉,您將無法重新連接套接字;從'Socket.close()'的'javadoc':'一旦套接字被關閉,它就不能用於進一步的網絡使用(即不能重新連接或反彈)。需要創建一個新的套接字。# – artbristol
@artbristol - 感謝那個指針。 –