[英]setSoTimeout on a client socket doesn't affect the socket
我有一个Java应用程序,它带有三个打开的线程,每个线程一个套接字,并连接到不同端口上的服务器。 建立与服务器的连接后,我在每个套接字上都设置了so_timeout。 之后,线程阻塞,等待read()。 20秒(我设置的超时)后,只有一个线程超时。 其他两个忽略超时。 TCP层一次只能处理一个超时吗? 还有其他解释吗?
过去在Windows中处理SO_TIMEOUT时遇到了几个问题。 我认为设置此设置是“应有的”设置可能依赖于操作系统并与注册表设置等冲突的底层套接字实现。
我的建议是不要使用SO_TIMEOUT强制在超时时引发抛出的异常。 使用非阻塞I / O或在读取()之前检查字节是否可用()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.