Socket.NoDelay Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
. Der Standardwert ist false
.
Ausnahmen
Fehler beim Zugriff auf den Socket.
Der Socket wurde geschlossen.
Beispiele
Im folgenden Codebeispiel wird die Verwendung des NoDelay-Attributs 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 = 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 so konzipiert, dass der Netzwerkdatenverkehr reduziert wird, indem der Socket kleine Pakete puffert und diese dann unter bestimmten Umständen in einem Paket kombiniert und sendet. Ein TCP-Paket besteht aus 40 Bytes Header und den gesendeten Daten. Wenn kleine Datenpakete mit TCP gesendet werden, kann der durch den TCP-Header verursachte Mehraufwand zu einem erheblichen Teil des Netzwerkdatenverkehrs werden. In stark ausgelasteten Netzwerken kann die durch diesen Mehraufwand verursachte Überlastung zu Verlusten von Datagrammen und Erneutübertragungen sowie zu einer übermäßigen Weitergabezeit aufgrund von Überlastung führen. Der Nagle-Algorithmus hemmt das Senden neuer TCP-Segmente, wenn neue ausgehende Daten vom Benutzer eintreffen, wenn zuvor übertragene Daten auf der Verbindung nicht bekannt sind.
Die Meisten Netzwerkanwendungen sollten den Nagle-Algorithmus verwenden.
Das Festlegen dieser Eigenschaft für einen UDP-Socket (User Datagram Protocol) hat keine Auswirkungen.