UDP サーバー/クライアント アプリケーションに取り組んでいます。
クライアントのいずれかがダウンしているかどうかを確認するために、サーバーはハンドシェイク メッセージをクライアントに送信します。次に、サーバーはクライアントの応答を待ってデータを送信し、クライアントがアクティブであることを確認します。このためrecvfrom()
、クライアントが応答しない限り、サーバーは への呼び出しでブロックしますが、クライアントがダウンしている場合、サーバーは への呼び出しで無限にブロックしますrecvfrom()
。
サーバーにそのような機能を実装しrecvfrom()
て、特定の時間 (たとえば 2 秒) の呼び出しで待機するようにしたいと考えています。2 秒以内にクライアントからデータを受信しなかった場合、クライアントは停止していると見なされ、recvfrom()
戻ります。
それを行う方法はありますか?私はインターネットを検索しましたMSG_DONTWAIT
が、データが受信されなかったときにすぐに戻るフラグを設定するなどの解決策を見つけましたが、私の場合、recvfrom()
すぐに戻りたくはありませんが、特定の期間データを待機し、その特定の期間データが受信されなかった場合、recvfrom()
関数は返す必要があります。