2009-05-12 21 views
1

Java-COMブリッジを介してサードパーティのCOMコンポーネントを使用するJavaアプリケーションがあります。 このCOMコンポーネントは、リモートホストへのソケット接続を開きます。TCPソケットタイムアウト設定

このホストは応答に時間がかかることがあり、タイムアウトが発生しているとは疑いがあります。私が言ったように、それはクローズドソースの第三者コンポーネントだからわからない。

このコンポーネントのAPIはソケット接続を私に公開していないため、タイムアウトを設定する方法はありません。だから、システムのデフォルトのタイムアウトを微調整する方法があるのだろうかと思う。

私はWindows Server 2008 x64 Enterprise Editionを使用しています。

答えて

1

実行時にタイムアウトが発生したかどうかを知るようにアプリケーションを構築するか、クローズドソースCOMコンポーネントの動作を調べるかしますか?後者の場合は、devboxにWiresharkをインストールし、接続を見てください。それが前者なら、あなたのJavaコールが本土に永遠に掛からないようにしたいのですか?その場合、java.util.concurrentエグゼキュータ・サービスに目を通してください。別のスレッドでメソッドを呼び出し、スレッドに制御を戻す前に最大N秒待つ方法があります。あなたは、接続が確立見て、おそらくタイムアウトからドロップしたい場合

0

独自のSocketImplFactoryを導入できます(java.net.Socketクラスの静的メソッドsetSocketImpl()を参照してください)。次に、独自のSO_TIMEOUTパラメータを使用してSocketImplオブジェクトを作成できます。

+0

をソケットがC++ Iで、Javaコードで作成されますが、COMオブジェクトがされていません推測。 – tuler

+0

ああ、そうです。あなたが正しいです。まあ、ネイティブのWindowsライブラリでも同様のことができないのだろうかと思います。 – Matej

0

TcpMaxDataRetransmissionsの「Windows Vista Tcp IP構成設定」で説明しているレジストリ設定では、必要なグローバルタイムアウトを設定できます。

実際のエラーへの応答が遅れても、サーバーの残りの部分に障害が発生しないように注意する必要があります。

関連する問題