C++でQtソケットを使用して小さなクロスプラットフォームアプリケーションを作成しましたが(これはC++またはQt固有の質問ではありません)。各ピアごとに新しいソケットを作成してpingを実行する
アプリにはピアに接続しようとする小さな「ping」機能があり、小さなチャレンジ(送信されたカスタムデータとカスタムデータが返信されます)を聞いて生きているかどうかを確認します。
私は各ピアごとに1つのソケットをオープンしていますので、pingが始まるとすぐにSYN_SENT
にいくつかのソケットがあります。
これはチャレンジ付きのpingのようなプロトコルを実装する適切な方法ですか?ソケットを浪費していますか?私はこれを行うべきであるより良い方法はありますか?
あなたの目的によって異なります。たとえば、[ping](https://en.wikipedia.org/wiki/Ping_(network_utility))は、ICMP要求パケットを送信し、ICMP応答パケットを待つだけで動作します。対照的に、TCP接続は[三方向ハンドシェイク](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment)を使用して確立され、[四方向ハンドシェイク](https:// en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment)。したがって、通常、1つの要求と応答のペアを転送するためにTCPを使用している場合、パケットを無駄にしています。 – Mike
"*私は各ピアごとに一つのソケットをオープンしているので、pingが始まるとすぐにSYN_SENT。*にいくつかのソケットがあります。"あなたがあなたのping機能のためにTCPを使用しているなら、これはどのようにすべきか?あなたは順番に接続しないでください**これは多くの時間を無駄にし、多くのピアがダウンしているかどうかを考えて、それぞれのタイムアウトが起こるのを待たなければなりません。 – Mike