は、あなたが参照してくださいKBの記事は
は、アプリケーション層でパフォーマンスを最適化するには...この方法であなたの答えを与え、アプリケーションから
のWinsockコピーデータ・バッファは、Winsockカーネルバッファへの呼び出しを送信します。次に、スタックは独自のヒューリスティック(Nagleアルゴリズムなど)を使用して、パケットを実際にワイヤに置くタイミングを決定します。 TCP_NODELAYまたは設定
と、SO_SNDBUF = 0 TCP_NODELAYソケットオプションは、小さなデータパケットがに配信されるように、Nagleアルゴリズムを無効にするために適用される
以下のようにNagleアルゴリズムを無効にしますリモートホストは遅滞なく。
SO_SNDBUFオプション(デフォルトは8K)を使用して、ソケットに割り当てられたWinsockカーネルバッファの量を変更できます。必要に応じて、WinsockはSO_SNDBUFバッファサイズよりも大幅にバッファリングできます。ほとんどの場合、アプリケーションの送信完了は、アプリケーション送信呼び出しのデータバッファがWinsockカーネルバッファにコピーされ、データがネットワークメディアにヒットしたことを示していないことを示します。唯一の例外は、SO_SNDBUFを0に設定してWinsockバッファリングを無効にする場合です。以下のコメントを読む
、私はTCP_NODELAYを設定したり、SO_SNDBUF = 0を設定することの両方が同じことをやっているように見えるので、あなたが混乱するかもしれません実現。その場合、NagleはTCPストリーム(データをパケットに分割する)上でのみ適用可能ですが、SO_SNDBUFはUDPソケットにも適用可能です。
SO_SNDBUFをゼロに設定すると、すべての出力バッファリングが明示的に停止し、(通常のソケット実装では)ソケット上の「書き込み」ごとに即時ディスパッチが試行されます。
TCP_NODELAYを設定すると、送信バッファが使用可能になり、遅れたディスパッチ(送信成功がアプリケーションに通知された後)に使用されますが、TCPソケットでNagleアルゴリズムが明示的に停止します。
出典
2009-06-19 11:58:52
nik
まだ明確ではありません。 TCP_NODELAYを使用して無効にします。最後に強調表示されたステートメントでは、データが実際に送信されるまで、送信完了通知が遅れていると表示されます。 Nagleアルゴリズムを無効にすることではありません。 – Canopus
SO_SNDBUFが0に設定されている場合、送信完了によってデータがネットワーク媒体にヒットしたことが示された場合の「唯一の例外」です。つまり、アプリケーションでは、ネットワーク回線へのデータ配信を確認する場合は、 SO_SNDBUFを0に設定します。これにより、ワイヤへの即時発送が強制されます。 – nik