Linux環境下でのC言語でのソケットプログラミングでSO_KEEPALIVEオプションの使い方を学ぼうとしていました。
サーバーソケットを作成し、ブラウザを使用して接続しました。成功してGETリクエストは読めたのですが、SO_KEEPALIVEの使い方で行き詰まりました。
このリンクkeepalive_description@tldg.orgを確認しましたが、使用方法を示す例が見つかりませんでした。
accept()
関数でクライアントの要求を検出するとすぐに、クライアント ソケットにSO_KEEPALIVE
オプション値を設定します。1
クライアントがダウンしているかどうかを確認する方法、送信されるプローブ間の時間間隔を変更する方法など、わかりません。
つまり、クライアントがダウンしているというシグナルをどのように受け取るのでしょうか? (クライアントで読み取りまたは書き込みを行わなくても、プローブがクライアントから返信されない場合にシグナルを受け取ると思いました)、オプション SO_KEEPALIVE をオンに設定した後、どのようにプログラムする必要がありますか)。
また、プローブが 3 秒ごとに送信され、その間にクライアントがダウンした場合、クライアントがダウンしていることを認識できず、SIGPIPE が発生する可能性があります。
とにかく重要なのは、コードで SO_KEEPALIVE を使用する方法を知りたいということです。