【发布时间】:2011-02-21 10:24:09
【问题描述】:
我想使用SocketChannel 并为其读/写方法设置超时。我试图为拥有我的SocketChannel 的 Socket 设置超时,如下所示:
channel.socket().setSoTimeout(TIMEOUT);
但这不起作用。还有其他解决方案吗?
【问题讨论】:
-
很遗憾,SocketChannel 不直接支持 setSoTimeout 方法。遗憾的是,使用它会被忽视。
-
SocketChannel 实现了 InterruptibleChannel 接口,这意味着您可以在进入 read() 调用之前创建一个单独的线程,让其他线程设置一个计时器,当计时器到期时,它可以中断线程您的 SocketChannel read() 调用被阻塞。如果 read() 调用首先返回,您可以让它终止计时器线程。
-
@StevensMiller 并且频道会被关闭,读取会抛出
ClosedByInterruptException.不是很有用。有人告诉我,这种奇怪的实现是 Linux 的行为所要求的。
标签: java socketchannel