【发布时间】:2014-01-12 05:11:03
【问题描述】:
查看 JDK 1.7 API。我似乎无法在 AsynchonousSocketChannel 上设置连接超时。无论如何我可以在这样的频道上设置连接超时吗?
谢谢。
【问题讨论】:
-
超时用于阻塞操作。这是一个异步操作。这个问题没有意义。
-
@EJP - 从不想永远等待套接字连接的角度来看,即使您的操作是异步的。也就是说,即使在 C 语言中,这也很棘手。您必须使用
select()和非阻塞模式下的套接字超时。我真的必须深入研究如何使用 NIO2 来做到这一点——考虑到这一切是如何从你身上抽象出来的,这甚至可能是不可能的。 -
@Brian 没有“永远等待”。默认连接超时时间约为一分钟,具体取决于平台。我知道如何在阻塞和非阻塞模式下执行此操作,谢谢,并且我同意您在下面的回答中的陈述,即鉴于现有的 Java API,您不能处于异步模式。他们应该为 connect 方法提供了一个超时参数,以便可以更早地调用
CompletionHandler(请注意,无论您在什么级别使用任何技术,都只能减少连接超时,而不能增加它)。 -
@EJP 抱歉,我并不是要暗示 you 没有......当我发表评论时,这部分是作为 OP 的一般性声明 /其他读者,然后我决定回答 Q。同意他们应该将其包含在 API 中。并澄清“永远等待”意味着默认超时。
-
@Brian 我认为 NIO2 API 缺少的是异步选择器(
WSAAsyncSelect()或WSAEventSelect()),这就是您必须在 Winsock 中实现它的方式。也许它们只存在于 Winsock:我不熟悉 Unix 异步 API。
标签: java sockets asynchronous connect nio