Apache的HttpClient的框架允许你指定连接超时和套接字超时,像这样:有什么办法来区分连接超时和套接字超时?
final HttpParams httpParams = new BasicHttpParams();
if (connectionTimeout > 0) {
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeout);
}
if (socketTimeout > 0) {
HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
}
HttpClient client = new DefaultHttpClient(httpParams);
我想微调我的连接超时。 This question很好地解释了设置之间的差异,但对调试抛出的异常没有帮助。
我的问题是,什么异常会引发每种类型的超时?我有一个java.net.SocketTimeoutException
;这是从连接超时还是套接字超时?我怀疑这是后者,尤其是因为信息中显示“Read timed out”。连接超时会引发什么异常? TimeoutException
? ConnectException
?为什么在Apache Http Docs中捕获的超时设置和抛出的异常之间没有关系?
SocketTimeoutException
的直接父类为InterruptedIoException
和IOException
;前者只有SocketTimeoutException
作为子类,但IOException
有许多子类。是否有另一个参考涵盖了所有可以从HttpClient execute
方法中获得的异常?它只声明它可以抛出一个IOException
,这真的很宽泛。