Socket.NoDelay Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
Hodnota vlastnosti
false
Socket pokud se použije algoritmus Nagle; truev opačném případě . Výchozí hodnota je false.
Výjimky
Při pokusu o přístup k objektu Socket.
Ta Socket byla uzavřena.
Příklady
Následující příklad kódu ukazuje použití NoDelay vlastnosti.
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("");
}
Poznámky
Algoritmus Nagle je navržený tak, aby omezoval síťový provoz tím, že soket za určitých okolností ukládá malé pakety do vyrovnávací paměti a pak je zkombinoval a odeslal v jednom paketu. Paket TCP se skládá ze 40 bajtů hlavičky a odesílaných dat. Při odesílání malých paketů dat pomocí protokolu TCP se režie vyplývající z hlavičky TCP může stát významnou součástí síťového provozu. U silně zatížených sítí může přetížení vyplývající z této režie vést ke ztrátě datovýchgramů a retransmissions a také k nadměrnému šíření času způsobenému přetížením. Algoritmus Nagle inhibuje odesílání nových segmentů TCP při příchodu nových odchozích dat od uživatele, pokud nějaká dříve přenášená data v připojení zůstanou nepovězená.
Většina síťových aplikací by měla používat algoritmus Nagle.
Nastavení této vlastnosti v soketu UDP (User Datagram Protocol) nebude mít žádný vliv.