14

非常に負荷の高いプロセスを呼び出そうとしています。平均作業時間は 9 ~ 10 分と推定されます。

プロセスを実行しているとき、私は途方もなく巨大な数のタイムアウトを設定しました: 99999999.

2 分後、次のエラーが表示されます。

java.net.SocketTimeoutException: 読み取りタイムアウト

もう少しいじってみましたが、タイムアウトを 3000 に設定し、予想どおり 3 秒後に同じエラーが発生しました。

なぜsocket.setSoTimeout(99999999)それを最大120000に設定するのかについて何か考えがありますか?

4

3 に答える 3

2

明らかに、設定していると思われるタイムアウトを設定していないか、後で他の誰かがそれを変更しています。さらに説明を得るには、いくつかのコードを投稿する必要があります。

TCP/IP Illustrated、 Vol II、#17.4 のWR Stevens によると、タイムアウトは 1000Hz ティックの数として短く保持されるため、11 分を超えるタイムアウトは不可能であることに注意してください。これは BSD コードに適用されます。

于 2013-02-09T09:47:57.490 に答える
1

あなたのアプリケーションがどのように機能するかわかりませんが、ソケットに無限のタイムアウトを設定してみてください

public void setSoTimeout(int timeout)
              throws SocketException

SO_TIMEOUTミリ秒単位で指定されたタイムアウトで有効/無効にします。このオプションをゼロ以外のタイムアウトに設定すると、この Socket に関連付けられた でのread()呼び出しは、InputStreamこの時間だけブロックされます。タイムアウトが発生するjava.net.SocketTimeoutExceptionと、Socket は引き続き有効ですが、a が発生します。このオプションを有効にするには、ブロッキング操作に入る前に有効にする必要があります。タイムアウトは でなければなりません> 0。ゼロのタイムアウトは、無限のタイムアウトとして解釈されます。

通話に関する詳細情報を提供していただければ、回答が改善される可能性があります。

于 2012-09-13T12:54:33.733 に答える