Freigeben über


Socket.NoDelay Eigenschaft

Definition

Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob der Datenstrom Socket den Nagle-Algorithmus verwendet.

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

falsewenn der Socket Nagle-Algorithmus verwendet wird; andernfalls . true Der Standardwert lautet false.

Ausnahmen

Fehler beim Versuch, auf die SocketDatei zuzugreifen.

Das Socket wurde geschlossen.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der NoDelay Eigenschaft veranschaulicht.

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 wurde entwickelt, um den Netzwerkdatenverkehr zu reduzieren, indem der Socket kleine Pakete puffert und diese dann unter bestimmten Umständen in einem Paket kombinieren und senden kann. Ein TCP-Paket besteht aus 40 Bytes Kopfzeile und den gesendeten Daten. Wenn kleine Datenpakete mit TCP gesendet werden, kann der Aufwand, der sich aus dem TCP-Header ergibt, zu einem erheblichen Teil des Netzwerkdatenverkehrs werden. Bei stark geladenen Netzwerken kann die durch diesen Aufwand verursachte Überlastung zu verlorenen Datagrammen und Neuübertragungen sowie zu übermäßiger Vermehrungszeit führen, die durch Staus verursacht wird. Der Nagle-Algorithmus hemmt das Senden neuer TCP-Segmente, wenn neue ausgehende Daten vom Benutzer eintreffen, wenn zuvor übertragene Daten über die Verbindung nicht bekannt sind.

Der Großteil der Netzwerkanwendungen sollte den Nagle-Algorithmus verwenden.

Das Festlegen dieser Eigenschaft für einen UDP-Socket (User Datagram Protocol) hat keine Auswirkung.

Gilt für: