Java ソケットに soTimeout を設定すると、アクティブ ピアとパッシブ ピアの場合の動作はどうなりますか。たとえば、readtimeout 値が 1 分で、ファイル転送に 5 分かかる場合、readtimeout 例外が発生しますか? 私にとっては、接続がハングしたときにタイムアウト例外を取得する必要があります。
3288 次
1 に答える
3
このsoTimeout
設定は、ソケットの入力ストリームから読み取る操作に明示的に影響します。これは、呼び出し元が読み取り操作で時限ブロックを定義できるようにするものと考えることができます。のJavadocからsetSoTimeout
:
ミリ秒単位で指定されたタイムアウトで SO_TIMEOUT を有効/無効にします。 このオプションをゼロ以外のタイムアウトに設定すると、この Socket に関連付けられた InputStream での read() 呼び出しは、この時間だけブロックされます。タイムアウトになると、Socket は引き続き有効ですが、java.net.SocketTimeoutException が発生します。
パッシブ ピアの場合、ピアが を呼び出さないという理由だけでタイムアウトは発生しませんread
。ただし、読み取り呼び出しを行う場合、呼び出しはsoTimeout
有効期限が切れる前にデータを返す必要があります。そうしないと、SocketTimeoutException が発生します。
于 2013-03-12T13:53:32.757 に答える