ソケットプログラミングJava - ソケット接続がどのくらいの時間生きていますか?そして私はそれをどうすればコントロールできますか?

私がソケット上で何もしないと、どうやってソケット接続を維持できるのか知っていますか? 私はちょうど私の接続がバックグラウンド上にあり、私はそれを操作しない場合に気づいた:

java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.writeInt(Unknown Source)

だから、何らかのアイドル時間の後に接続が失われないように、そしてデフォルトでどれくらいの時間が経過した後に、接続が失われないようにするにはどうすればいいですか?

1
@KlasLindbäckいいえ、そうではありません。ここで直面する問題はリセットです。
追加された 著者 EJP,
追加された 著者 Klas Lindbäck,

2 答え

この問題には一般的な解決策はありません。 TCP/IP接続をリセット/クローズすることを決定したリモートサーバー/サービスは非常に可能性があります。どのように、なぜそれがアプリケーション固有であるかを決定します。それを防ぐためには、アプリケーション固有の解決策が必要です。

FWIWでは、SO_KEEP_ALIVEメカニズムにより、プロトコルスタックは、他の場合はアイドル状態のTCP/IP接続でメッセージを時折交換します。これは、ポートの再利用のためにNAT接続でリセットが発生した場合に役立ちます。関連するJavaメソッドは、 Socket.setKeepAlive を参照してください。

2
追加された
キープアライブタイムアウトの長さを制御する方法はありますか?
追加された 著者 MeBigFatGuy,
大丈夫です、あなたが指定したメカニズムへのリンクがありますか?試してみることができます。ubuntu 10でサーバを稼働させています。
追加された 著者 Mulder,

ピアによる接続リセット:ソケット書き込みエラー

これは、通常、ピアによってすでに閉じられている接続に書き込むことによって発生します。これはアプリケーションプロトコルエラーです。接続の寿命について心配する前にまずそれを調べるべきです。

1
追加された