当我使用标准的HTTP客户端在Java中收到 SocketTimeoutException 时,我想区分读取超时和连接超时。 要重现此问题,我对正在运行的服务器使用了 kill -SIGSTOP 命令,并观察到以下情况:
System.out.println(NAMES);
,程序将暂停并且我看不到任何异常。 1秒钟后,我是否应该看到conn.setConnectTimeout(1000);
和SokcetTimeoutException
的消息? connect timed out
和conn.setConnectTimeout(1000);
时,我看到此程序打印conn.setReadTimeout(3000);
。这是否意味着服务器能够建立连接?在这种情况下,我假设Cause:java.net.SocketTimeoutException: Read timed out
暂停了该过程,但让连接建立了。 目的:我必须处理请求仅包含SIGSTOP
值的情况。我的api的调用方未设置Connection time out
,因此如果我无法在指定的连接超时值内连接到服务器,则必须抛出异常。
Read time out