Condividi tramite


Socket.NoDelay Proprietà

Definizione

Ottiene o imposta un Boolean valore che specifica se il flusso Socket utilizza l'algoritmo 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

Valore della proprietà

false Socket se utilizza l'algoritmo Nagle; in caso contrario, true. Il valore predefinito è false.

Eccezioni

Si è verificato un errore durante il Sockettentativo di accesso a .

L'oggetto Socket è stato chiuso.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso della NoDelay proprietà .

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("");
}

Commenti

L'algoritmo Nagle è progettato per ridurre il traffico di rete causando il buffer dei pacchetti di piccole dimensioni del socket e quindi combinarli e inviarli in un unico pacchetto in determinate circostanze. Un pacchetto TCP è costituito da 40 byte di intestazione più i dati inviati. Quando vengono inviati piccoli pacchetti di dati con TCP, l'overhead risultante dall'intestazione TCP può diventare una parte significativa del traffico di rete. Nelle reti caricate pesantemente, la congestione risultante da questo sovraccarico può comportare la perdita di datagrammi e ritrasmissioni, nonché un tempo di propagazione eccessivo causato dalla congestione. L'algoritmo Nagle impedisce l'invio di nuovi segmenti TCP quando arrivano nuovi dati in uscita dall'utente se i dati trasmessi in precedenza sulla connessione rimangono non riconosciuti.

La maggior parte delle applicazioni di rete deve usare l'algoritmo Nagle.

L'impostazione di questa proprietà su un socket UDP (User Datagram Protocol) non avrà alcun effetto.

Si applica a