2012-09-13 27 views
10

私は非常に重い義務のプロセスに電話をかけようとしています。 平均作業時間は9〜10分です。私は、プロセスを実行していた場合Java:ソケット読み取りタイムアウト例外

、私は途方もなく膨大な数のタイムアウトを設定:2分後99999999

、私は次のエラーを取得する:

java.net.SocketTimeoutException: Read timed out

私が台無しにしようとしましたそれはもう少しで、私は3000にタイムアウトを設定し、3秒後に私は同じエラーが発生しました。

socket.setSoTimeout(99999999)が120000 maxに設定されている理由はありますか?

+3

このメソッドはOSに渡されるので、このメソッドの動作はお使いのOSによって異なります。どのOSのバージョンを使用していますか? –

+1

あなたはキープアライブメッセージを送信しようとしましたか、それとも、ソケットが開いたままになっているのではなく、プロセスが完了したときにプロセスに「コール」してもらえましたか? – Thor84no

+1

OSが範囲外であるため、OSがあなたの価値を拒否しているようです。私はより高い値で演奏しようとしますが、それほど高くはありません(あなたはそれを27時間以上に設定しています)。 vg。、3分、5分、10分。 – SJuan76

答えて

2

私は同じ問題を抱えていました。最後にソケットにデータを読み書きするまで、解決策は使用されませんでした。 socket.shutdownInput(); socket.shutDownOutput();これにより、ソケットはFIN_WAIT状態になり、2分待って閉じます。あなたはそれについてもっと読むことができますthis post

+0

この手法では、読み取りタイムアウト例外を解決できない可能性があります。 – EJP

+0

テストケースを実行する時間がかかった場合、これが解決策であることがわかりました。あなた自身で試してみて、ソケットにいくつかの入力を書いて 'shutdownInput'を使うと、ソケットがFIN_WAIT状態に変わることがわかります。 2分待つと、ソケットが閉じていることがわかります。 – Rotem

+1

ありがとう、Rotem、that worked!:) – Urbanleg

1

私は私が答えを改善することが、あなたのアプリケーションがどのように動作するかわからないんだけど、あなたはあなたの呼び出しに関するより多くの情報を提供した場合、無限timeout to the socket

public void setSoTimeout(int timeout) 
       throws SocketException 

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0 . A timeout of zero is interpreted as an infinite timeout.

を設定してみてください。

+0

私はタイムアウトを0に設定しようとしましたが(無限の時間になるはずです)、再び120秒後に例外がスローされます。 – Urbanleg

+0

接続している間、バッファはデータをまったく読み込みますか?サーバーのアドレスがネットワークで正しく解決されない可能性があるため、サーバーがローカルに接続されているか、VPNに接続されているか、またはリモートサーバーに接続されているかわからないため、サーバーは接続に応答していますか?アドレスがnetbiosクエリ、またはホストファイル、またはリモートDNSを使用して解決されたかどうかわからない場合は、間違ったアドレスになる可能性のある要素がたくさんあります –

+0

サーバーはローカルです。 2分もかからないようにするには、うまく動作します。 – Urbanleg

2

あなたが設定していると思われるタイムアウトを設定していないか、または他の誰かがそれ以降にそれを変更していることは明らかです。さらに解明するには、コードをいくつか投稿する必要があります。 TCP/IPイラスト、巻II、#17.4でW.R.スティーブンスによれば、タイムアウトが1000Hzを数としてショートに保持される

注マダニので、11分を超えてタイムアウトは不可能です。これはBSDコードに当てはまります。

+0

@downvoter説明してください。あなたはスティーブンスに同意しない? – EJP

関連する問題