我有一个Java应用程序,它有三个打开的线程,每个都是一个套接字,并连接到不同端口上的服务器。 在建立与服务器的连接后,我在每个套接字上设置了so_timeout。 之后,线程阻塞等待read()。 20秒后只有一个线程超时(这是我设置的超时)。 其他两个忽略了超时。 TCP层有可能一次只处理一个超时吗? 还有其他解释吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
过去我在Windows中处理SO_TIMEOUT时遇到了一些问题。我相信设置它是“假设”设置可能依赖于操作系统并与注册表设置冲突的底层套接字实现。
我的建议是不要使用SO_TIMEOUT强制在超时时抛出异常。在读取()之前,请使用非阻塞I / O或检查是否有可用字节()。