あなたが参照するKB記事は、このようにあなたの答えを提供します...
アプリケーション層でのパフォーマンスを最適化するために、Winsock はデータ バッファーをアプリケーション送信呼び出しから Winsock カーネル バッファーにコピーします。次に、スタックは独自のヒューリスティック (Nagle アルゴリズムなど) を使用して、実際にパケットをネットワークに送信するタイミングを決定します。
また、TCP_NODELAY または SO_SNDBUF=0 を設定すると、以下のように Nagle アルゴリズムが無効になります。
TCP_NODELAY ソケット オプションを適用して Nagle アルゴリズムを無効にし、小さなデータ パケットが遅延なくリモート ホストに配信されるようにします。
SO_SNDBUF オプションを使用して、ソケットに割り当てられた Winsock カーネル バッファの量を変更できます (デフォルトでは 8K です)。必要に応じて、Winsock は SO_SNDBUF バッファー サイズよりも大幅に多くのバッファーを使用できます。ほとんどの場合、アプリケーションでの送信完了は、アプリケーション送信呼び出しのデータ バッファーが Winsock カーネル バッファーにコピーされたことを示すだけであり、データがネットワーク メディアに到達したことを示すものではありません。唯一の例外は、SO_SNDBUF を 0 に設定して Winsock バッファリングを無効にした場合です。
以下のコメントを読むと、TCP_NODELAY を設定するか、SO_SNDBUF=0 を設定すると、どちらも同じことをしているように見えるため、混乱する可能性があることがわかります。その場合、SO_SNDBUF は UDP ソケットにも適用できるのに対し、Nagle は TCP ストリーム (データをパケットにセグメント化する) にのみ適用できることに注意してください。
SO_SNDBUF を 0 に設定すると、すべての出力バッファリングが明示的に停止され、ソケットの「書き込み」ごとに即時ディスパッチが試行されます (少なくとも通常のソケット実装では)。
TCP_NODELAY を設定すると、TCP ソケットで Nagle アルゴリズムが明示的に停止されますが、送信バッファーが利用可能であり、遅延ディスパッチに使用される場合があります (送信の成功がアプリケーションに確認された後)。