SSHGanymedライブラリエイリアスTrileadエイリアスOrionを使用しています。
ssh接続を長時間(おそらく永遠に)開いたままにし、jvmがダウンしたときなどに閉じる必要があるため、セッションの正確な動作を理解しようとしています。
だから、私の問題はこれです。私がこのようなことをすると仮定します:
Connection conn = new Connection(this.hostName, this.port);
conn.addConnectionMonitor(new ConnectionMonitor()
{
@Override
public void connectionLost(Throwable reason)
{
System.out.println("Connection Lost " reason.getMessage());
}
});
conn.connect(null, 1000, 20000);
conn.authenticateWithPublicKey(this.user, keyfile, this.password);
Thread.sleep(30000); //sleep the Thread for 30 seconds
Session sess = conn.openSession();
sess.execCommand("ls");
conn.close();
そして、スレッドがスリープしている30秒間に、ネットワークの問題をエミュレートするためにネットワークインターフェイスを切断します。
1)切断イベントがconnectionMonitorによって傍受されず、接続が失われたというメッセージが出力されない2)
Session sess = conn.openSession();
が実行され、プロセスがブロックされ、ネットワークインターフェイスに再度接続しない限り何も起こりません。これは、Ganymedコードを見ると、切断イベントが検出されないため、セッションが開かれ、成功するまでセッションを開くロックがあるように見えるためです。
だから私の質問は次のとおりです:1)この動作は必要ですか、それともバグですか?2)Connection.openSession()メソッドとConnection.connect()メソッドでタイムアウトを設定する方法はありますか?
前もって感謝します。