Socket.NoDelay Eigenschaft

Definition

Ruft einen Boolean-Wert ab, der angibt, ob der Stream-Socket den Nagle-Algorithmus verwendet, oder legt diesen fest.Gets or sets a Boolean value that specifies whether the stream Socket is using the Nagle algorithm.

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

Eigenschaftswert

false, wenn der Socket den Nagle-Algorithmus verwendet, andernfalls true.false if the Socket uses the Nagle algorithm; otherwise, true. Die Standardeinstellung ist false.The default is false.

Ausnahmen

Fehler beim Zugriff auf den Socket.An error occurred when attempting to access the Socket.

Der Socket wurde geschlossen.The Socket has been closed.

Beispiele

Im folgenden Codebeispiel wird die Verwendung des NoDelay-Attributs veranschaulicht.The following code example demonstrates the use of the NoDelay property.

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 = gcnew 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 {0}", 
        tcpSocket->ExclusiveAddressUse);
    Console::WriteLine("  LingerState {0}, {1}", 
        tcpSocket->LingerState->Enabled,
        tcpSocket->LingerState->LingerTime);
    Console::WriteLine("  NoDelay {0}",
        tcpSocket->NoDelay);
    Console::WriteLine("  ReceiveBufferSize {0}", 
        tcpSocket->ReceiveBufferSize);
    Console::WriteLine("  ReceiveTimeout {0}",
        tcpSocket->ReceiveTimeout);
    Console::WriteLine("  SendBufferSize {0}",
        tcpSocket->SendBufferSize);
    Console::WriteLine("  SendTimeout {0}",
        tcpSocket->SendTimeout);
    Console::WriteLine("  Ttl {0}",
        tcpSocket->Ttl);
    Console::WriteLine("  IsBound {0}",
        tcpSocket->IsBound);
    Console::WriteLine("");
}
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("");
}

Hinweise

Der Nagle-Algorithmus ist darauf ausgelegt, den Netzwerk Datenverkehr zu verringern, indem der Socket kleine Pakete puffert und Sie dann in einem Paket unter bestimmten Umständen kombiniert und sendet.The Nagle algorithm is designed to reduce network traffic by causing the socket to buffer small packets and then combine and send them in one packet under certain circumstances. Ein TCP-Paket besteht aus 40 Bytes des Headers und den gesendeten Daten.A TCP packet consists of 40 bytes of header plus the data being sent. Wenn kleine Datenpakete mit TCP gesendet werden, kann der mehr Aufwand, der sich aus dem TCP-Header ergibt, zu einem erheblichen Teil des Netzwerk Datenverkehrs werden.When small packets of data are sent with TCP, the overhead resulting from the TCP header can become a significant part of the network traffic. Bei stark ausgelasteten Netzwerken kann die Überlastung, die sich aus diesem Aufwand ergibt, zu verlorenen Datagramme und erneuten Übertragungen sowie zu einer übermäßigen propagierungs Zeit führen, die durch eine Überlastung verursacht wirdOn heavily loaded networks, the congestion resulting from this overhead can result in lost datagrams and retransmissions, as well as excessive propagation time caused by congestion. Der Nagle-Algorithmus hemmt das Senden neuer TCP-Segmente, wenn neue ausgehende Daten vom Benutzer empfangen werden, wenn zuvor übertragene Daten über die Verbindung nicht bestätigt bleiben.The Nagle algorithm inhibits the sending of new TCP segments when new outgoing data arrives from the user if any previously transmitted data on the connection remains unacknowledged.

Die Mehrzahl der Netzwerkanwendungen sollte den Nagle-Algorithmus verwenden.The majority of network applications should use the Nagle algorithm.

Das Festlegen dieser Eigenschaft für einen UDP-Socket (User Datagram Protocol) hat keine Auswirkungen.Setting this property on a User Datagram Protocol (UDP) socket will have no effect.

Gilt für: