[英]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.