切断時にフェイルファストするように Java ソケットを構成しますか?

StackOverflow https://stackoverflow.com/questions/22720

質問

サーバー上に Java クラスを使用して接続しているリスニング ポートがあり、 Socket インターフェース、つまり

Socket mySocket = new Socket(host,port);

それから私はそれをつかみます OutputStream, で飾ります。 PrintWriter 自動フラッシュモードでは、笑ってしまいますが、リスニングポートが閉じている場合を除きます。それから私は得ます

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

プログラムの問題を検出できないようです - を使用してみました isConnected() ソケット上のメソッドを実行しましたが、接続が閉じられていることを認識していないようです。

次回ソケットに書き込むときに問題を認識し、再接続して問題を報告できるようにしたいと考えています。

アドバイスをお願いします。

皆さんありがとう

役に立ちましたか?

解決

短いタイムアウトを設定しますか?

する isOutputShutdown() 欲しいものは手に入らないの?

いつでも構築できます SocketWatcher 独自に起動するクラス Thread そして空の文字列を繰り返し書き込もうとします。 Socket それが起こるまで SocketClosedException.

他のヒント

TCP で切断された接続を検出する唯一の信頼できる方法は、接続に書き込むことです。これにより、最終的に「接続リセット」IOException が発生します。ただし、バッファリングのため、切断後の最初の書き込みでは発生せず、後続の書き込みで発生します。これについては何もできません。

ソケットからの読み取りに別のスレッドを設定します。ソケットが閉じられるまでブロックされ、その後例外がスローされます。その例外をキャッチして、クローズをすぐに検出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top