setSoTimeout上的客户端套接字不影响插座(setSoTimeout on a client

2019-08-01 21:51发布

我有三个线程打开,每一个,一个插座,连接到不同的端口上的服务器的Java应用程序。 我SO_TIMEOUT设置在每个插座的建立到服务器的连接之后。 该线程阻塞等待在读取后()。 只有在线程时间中的一个执行20秒(这是我设置的超时)。 另外两个忽略的超时时间。 是否有可能在TCP层在同一时间只处理一个超时? 是否有任何其他的解释吗?

Answer 1:

该文件说:

该选项必须在进入阻塞操作有效果启用。

也许你应该把它至少调用read()套接字之前建立到服务器的连接之前 ,。
但很难说没有代码...



Answer 2:

我已经在过去与SO_TIMEOUT在Windows处理的几个问题。 我相信在这里设置“应该”设置底层套接字实现可能是OS依赖和相互冲突与注册表设置和这样。

我的建议是不要用SO_TIMEOUT来强制超时抛出异常。 请使用非阻塞I / O或检查是否有可用的字节()你读前()。



文章来源: setSoTimeout on a client socket doesn't affect the socket