connect timeoutとread timeoutの意味がよくわからなかったので調べました。
調べた環境はjdk1.7.0_02 (Windows 64bit)です。
connect timeout
connect timeoutは接続にかかった時間で、setConnectTimeoutで設定します。引数はミリ秒で指定し、0を指定すると無限になります。
デフォルト値はJavadocに書いてないのですが、0になっています。
connect timeoutが発生するのはconnectメソッド内です。
接続にかかった時間がtimeout値を超えるとSocketTimeoutExceptionが発生します。
read timeout
read timeoutはデータ取得にかかった時間で、setReadTimeoutで設定します。(リクエストを投げてレスポンスが帰ってくるまでの時間)
引数はミリ秒で指定し、0を指定すると無限になります。
デフォルト値はJavadocに書いてないのですが、0になっています。
read timeoutが発生するのは、レスポンスデータを参照するメソッドです。
- getContent
- getHeaderFields
- getInputStream
- getResponseCode
- getResponseMessage
- getContentEncoding
- getContentLength
- getContentLengthLong
- getContentType
- getDate
- getExpiration
- getHeaderField
- getHeaderFieldDate
- getHeaderFieldInt
- getHeaderFieldKey
- getLastModified
ただ、上記の内、SocketTimeoutExceptionが発生するのは次のメソッドだけです。
- getContent
- getHeaderFields
- getInputStream
- getResponseCode
- getResponseMessage
他のメソッドはnullとか0とかエラー値を返すだけです。
SocketTimeoutExceptionが発生しないメソッドだけを使うと、
timeoutが起こったことがわからないので注意が必要です。
どのメソッドが例外を投げるかはJavadocに書いてないので実際の動作からしか読み取れません。
(getInputStreamだけは書いてあったりしてますますよくわかりません。)
実際に使用する環境でも念のため調べておいた方が無難でしょう。