我有三个线程打开,每一个,一个插座,连接到不同的端口上的服务器的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