Socket.NoDelay Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
Valeur de propriété
false si l’algorithme Socket Nagle est utilisé ; sinon, true. La valeur par défaut est false.
Exceptions
Une erreur s’est produite lors de la tentative d’accès au Socket.
Il Socket a été fermé.
Exemples
L’exemple de code suivant illustre l’utilisation de la NoDelay propriété.
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("");
}
Remarques
L’algorithme Nagle est conçu pour réduire le trafic réseau en empêchant le socket de mettre en mémoire tampon de petits paquets, puis de les combiner et de les envoyer dans un paquet dans certaines circonstances. Un paquet TCP se compose de 40 octets d’en-tête plus les données envoyées. Lorsque de petits paquets de données sont envoyés avec TCP, la surcharge résultant de l’en-tête TCP peut devenir une partie importante du trafic réseau. Sur les réseaux fortement chargés, la congestion résultant de cette surcharge peut entraîner des datagrammes perdus et des retransmissions, ainsi que des temps de propagation excessifs causés par la congestion. L’algorithme Nagle empêche l’envoi de nouveaux segments TCP lorsque de nouvelles données sortantes arrivent de l’utilisateur si des données transmises précédemment sur la connexion restent inconnues.
La majorité des applications réseau doivent utiliser l’algorithme Nagle.
La définition de cette propriété sur un socket UDP (User Datagram Protocol) n’aura aucun effet.