[英]Any issues with replacing new Socket() with SocketChannel.open().socket()?
如果我簡單地更換會出什么問題
socket = new Socket()
和
socket = SocketChannel.open().socket()?
背景:我有一些使用new Socket()
遺留代碼,我希望能夠中斷socket.connect()
調用。 我不想重寫代碼來使用 NIO。 我了解到Thread.interrupt()
不會中斷socket.connect()
,但是另一個線程上的socket.close()
應該中斷連接。 奇怪的是,這適用於 Java 7 但不適用於 Java 6。
我以某種方式讓我想到使用socket = SocketChannel().open().socket()
會神奇地允許我使用Thread.interrupt()
來中斷socket.connect()
。 它沒有,但奇怪的是,它確實使 Java 6 中的socket.close()
中斷socket.connect()
!
請注意,我沒有以任何方式直接使用附加的SocketChannel
---它在我創建Socket
時出現並且再也不會出現。
這有什么問題?
有幾種。
為什么要中斷connect() 調用? 當然你想要的只是連接超時?
拋出異常類型的差異可能會破壞現有代碼。
例如,在Socket.getInputStream().read()
阻塞時關閉來自不同線程的Socket
將在替換后導致AsynchronousCloseException ,而不是遺留代碼可能期望的SocketException
。 ( AsynchronousCloseException
不是SocketException
的子類。)
但是,如果來自其他線程的關閉在read()
之前進入, Socket.getInputStream().read()
仍將拋出SocketException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.