如果我简单地更换会出现什么问题
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
时出现,并且再也不会出现。
这会出什么问题?
最佳答案
有几个。
- 通过 SocketChannel 获取的 Socket 似乎不支持读取超时。
- 套接字的输入流和输出流不是独立的:它们具有共同的互锁。
为什么要中断 connect() 调用?当然您想要的只是连接超时?
关于java - 用 SocketChannel.open().socket() 替换 new Socket() 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821088/