【发布时间】:2009-09-30 14:21:10
【问题描述】:
我无法在套接字 Java API 中找到关闭在 TIMEOUT 毫秒内打开的非活动连接的方法。 目的是避免在我忘记显式关闭套接字时出现令人尴尬的错误(并强制重启远程资源)。
如果我没有找到低级方法,我会在我们的连接中添加一个上次使用的值,并定期检查它……但我觉得那很难看。
谢谢,
安东尼
附:我不希望连接超时,我不确定是否理解 setSoTimeout,但我很确定这不是我们想要的。
P.P.S.当然,避免忘记结束会更好,但在大型项目 + 大型团队中……我们会尝试找到 100% 安全的方式。
【问题讨论】:
-
你是对的,如果另一端只是停止监听,你就无法避免等待 read() 超时。所以这与连接超时或soTimeout无关。您将不得不使用一个单独的线程,它只会在锁上调用 wait(timeout) (并在每次读取之前禁用或重置超时,以便它不会在正常操作下关闭)。或者将整个网络模型改为非阻塞。