2012-01-13 51 views
3

我有一種情況,我有多個服務器的多個連接,我希望爲此使用NIO。如何檢測NIO通道上的連接錯誤

選擇器會告訴我什麼時候有數據需要讀取。有什麼方法可以知道連接何時不再連接?也許當寫入失敗或通過捕獲在某些操作中引發的異常時? 我需要這樣做是非阻塞的,我想這樣做的方式是,如果連接失敗,可以重新建立通道(即建立到同一服務器的新通道)。

回答

3

你會得到讀/寫的例外。在其他時候,如果頻道註冊了選擇器的讀/寫興趣,當頻道中斷時,select()將返回,並且頻道的選擇鍵將指示可讀/可寫。在下次讀取/寫入時會遇到異常。

+0

謝謝!這似乎也是它的工作方式,也是連接失敗的原因,所以讀/寫也是有意義的。 – jbx 2012-01-16 21:43:54

+1

*當通道斷開時,select()將返回,並且通道的選擇鍵將指示可讀/可寫*,但這不是真的,當我從SocketChannel讀取數據時,電纜被拔出,'select() '一直返回** 0 **,頻道將永遠不會再次被選中。如果我讀取或寫入通道忽略其可讀/寫狀態,read()不會返回** - 1 **,它會一直返回** 0 **,並且write()不會拋出異常。目前我發現無法檢測套接字斷開,有人給我一個線索? – neevek 2012-12-23 04:59:24

+0

@neevek你有沒有解決這個問題? – 2015-08-26 13:04:03