0

TCP 経由で APP を構築していますが、相手側がダウンしていることを検出するには、クライアントが疑似 ping パケットを送信し続けるハートビート メカニズムを実装する必要があります。いくつかのテストを行ったところ、もう一方の端がダウンしている場合、読み取られたバイト数は 0 であることがわかりました。

だから私はこのようなことはできませんか?:

If  FD is set, then 
read from fd
if read bytes is 0 then
Assume socket is closed, close fd and do a reconnect.

これは私にとってはうまくいっているので、キープアライブの必要性を理解していません。サーバーにも同じロジックがあり、私にとってはうまくいきます。

私はまっすぐに考えていますか?

4

1 に答える 1

0

read return 0 の原因は、ピアが FIN を送信したことです。あなたとピアの間にネットワークの問題がある場合 (ネットワーク ケーブルが差し込まれている)、アプリケーションはキープアライブなしでどのようにそれを検出しますか? 読み取りは長時間ブロックされます (OS 環境によって異なります)。

于 2013-02-25T09:39:33.340 に答える