Partager via


Socket.NoDelay Propriété

Définition

Obtient ou définit une Boolean valeur qui spécifie si le flux Socket utilise l’algorithme Nagle.

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.

S’applique à