共用方式為


Socket.NoDelay 屬性

定義

取得或設定 Boolean 值,指定資料流 Socket 是否使用 Nagle 演算法。

public:
 property bool NoDelay { bool get(); void set(bool value); };
public bool NoDelay { get; set; }
member this.NoDelay : bool with get, set
Public Property NoDelay As Boolean

屬性值

如果 Socket 使用 Nagle 演算法,則為 false,否則為 true。 預設為 false

例外狀況

嘗試存取 Socket 時發生錯誤。

範例

下列程式代碼範例示範 屬性的使用 NoDelay

static void ConfigureTcpSocket(Socket tcpSocket)
{
    // Don't allow another socket to bind to this port.
    tcpSocket.ExclusiveAddressUse = true;

    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket.LingerState = new LingerOption (true, 10);

    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket.NoDelay = true;

    // Set the receive buffer size to 8k
    tcpSocket.ReceiveBufferSize = 8192;

    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket.ReceiveTimeout = 1000;

    // Set the send buffer size to 8k.
    tcpSocket.SendBufferSize = 8192;

    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket.SendTimeout = 1000;

    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket.Ttl = 42;

    Console.WriteLine("Tcp Socket configured:");

    Console.WriteLine($"  ExclusiveAddressUse {tcpSocket.ExclusiveAddressUse}");

    Console.WriteLine($"  LingerState {tcpSocket.LingerState.Enabled}, {tcpSocket.LingerState.LingerTime}");

    Console.WriteLine($"  NoDelay {tcpSocket.NoDelay}");

    Console.WriteLine($"  ReceiveBufferSize {tcpSocket.ReceiveBufferSize}");

    Console.WriteLine($"  ReceiveTimeout {tcpSocket.ReceiveTimeout}");

    Console.WriteLine($"  SendBufferSize {tcpSocket.SendBufferSize}");

    Console.WriteLine($"  SendTimeout {tcpSocket.SendTimeout}");

    Console.WriteLine($"  Ttl {tcpSocket.Ttl}");

    Console.WriteLine($"  IsBound {tcpSocket.IsBound}");

    Console.WriteLine("");
}

備註

Nagle 演算法的設計目的是為了降低網路流量,方法是造成套接字緩衝小型封包,然後在特定情況下將它們合併並傳送到一個封包中。 TCP 封包包含 40 個字節的標頭,以及正在傳送的數據。 以 TCP 傳送小型數據封包時,TCP 標頭所產生的額外負荷可能會成為網路流量的重要部分。 在大量載入的網路上,由於此額外負荷所造成的壅塞可能會導致數據報和重新傳輸遺失,以及壅塞所造成的過多傳播時間。 Nagle 演算法會禁止在新傳出資料從使用者抵達時傳送新的 TCP 區段,如果任何先前在連線上傳輸過的數據仍保持未加密狀態。

大部分的網路應用程式都應該使用 Nagle 演算法。

在用戶數據報通訊協議上設定此屬性 (UDP) 套接字將不會有任何作用。

適用於