ホームページ >バックエンド開発 >C++ >サーバーはどのようにしてクライアントのソケット切断を即座に検出できるのでしょうか?

サーバーはどのようにしてクライアントのソケット切断を即座に検出できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 22:05:12887ブラウズ

How Can a Server Instantly Detect Client Socket Disconnections?

サーバーソケットからのクライアントの切断を即座に検出する

問題:

サーバーとして機能している場合、どうすれば即座に判断できるでしょうかクライアントが接続されているソケットから切断されるとき?サーバーへの接続時にクライアントの切断を検出する一般的な方法は、このシナリオでは効果がありません。

回答:

ソケット接続は、ネイティブに切断イベントを提供しません。したがって、ソケットの接続ステータスを定期的に確認する必要があります。次の拡張メソッドは、ソケットが切断されたかどうかを検出する信頼性の高い方法を提供します。

static class SocketExtensions
{
  public static bool IsConnected(this Socket socket)
  {
    try
    {
      return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
    }
    catch (SocketException) { return false; }
  }
}

このメソッドは、ユーザー定義の頻度でソケットをポーリングし、接続を判断します。ポーリングでソケットからの読み取りに利用可能なバイトがゼロであることが検出された場合、接続は切断されたとみなされます。

以上がサーバーはどのようにしてクライアントのソケット切断を即座に検出できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。