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
,這真的很寬泛。