Socket.NoDelay Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
Waarde van eigenschap
falseals het Socket gebruikmaakt van het Nagle-algoritme; anders. true De standaardwaarde is false.
Uitzonderingen
Er is een fout opgetreden bij het openen van de Socket.
De Socket is gesloten.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe de NoDelay eigenschap wordt gebruikt.
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("");
}
Opmerkingen
Het Nagle-algoritme is ontworpen om het netwerkverkeer te verminderen door ervoor te zorgen dat de socket kleine pakketten buffert en deze vervolgens onder bepaalde omstandigheden in één pakket combineert en verzendt. Een TCP-pakket bestaat uit 40 bytes header plus de gegevens die worden verzonden. Wanneer kleine pakketten met gegevens worden verzonden met TCP, kan de overhead die het gevolg is van de TCP-header een aanzienlijk deel van het netwerkverkeer worden. Bij zwaar belaste netwerken kan de congestie die het gevolg is van deze overhead leiden tot verloren gegevensgrammen en hertransmissies, evenals overmatige doorgiftetijd veroorzaakt door congestie. Het Nagle-algoritme remt het verzenden van nieuwe TCP-segmenten wanneer nieuwe uitgaande gegevens van de gebruiker binnenkomen als eerder verzonden gegevens op de verbinding niet bekend blijven.
De meeste netwerktoepassingen moeten het Nagle-algoritme gebruiken.
Het instellen van deze eigenschap op een UDP-socket (User Datagram Protocol) heeft geen effect.