Socket.LingerState 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í.
Získá nebo nastaví hodnotu, která určuje, zda Socket se zpozdí zavření soketu při pokusu o odeslání všech čekajících dat.
public:
property System::Net::Sockets::LingerOption ^ LingerState { System::Net::Sockets::LingerOption ^ get(); void set(System::Net::Sockets::LingerOption ^ value); };
public System.Net.Sockets.LingerOption? LingerState { get; set; }
public System.Net.Sockets.LingerOption LingerState { get; set; }
member this.LingerState : System.Net.Sockets.LingerOption with get, set
Public Property LingerState As LingerOption
Hodnota vlastnosti
Určuje LingerOption , jak přetrvávat při zavírání soketu.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Příklady
Následující příklad kódu ukazuje použití LingerState 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
Vlastnost LingerState změní způsob, jakým Close se metoda chová. Tato vlastnost při nastavení upravuje podmínky, za kterých může být připojení resetována službou Winsock. K resetování připojení může stále docházet na základě chování protokolu IP.
Tato vlastnost řídí dobu, po kterou připojení orientované na připojení zůstane otevřené po volání, Close když budou data odeslána.
Při volání metod pro odesílání dat do partnerského uzlu se tato data umístí do odchozí síťové vyrovnávací paměti. Tuto vlastnost lze použít k zajištění, že se tato data odesílají vzdálenému hostiteli předtím, než Close metoda připojení zahodí.
Chcete-li povolit přetrvání, vytvořte LingerOption instanci obsahující požadované hodnoty a nastavte LingerState vlastnost na tuto instanci.
Následující tabulka popisuje chování Close metody pro možné hodnoty Enabled vlastnosti a LingerTime vlastnost uložená LingerState ve vlastnosti.
| LingerState.Enabled | LingerState.LingerTime | Chování |
|---|---|---|
false (zakázáno), výchozí hodnota |
Časový limit není použitelný (výchozí). | Pokusí se odeslat nevyřízená data, dokud nevyprší vypršení časového limitu výchozího protokolu IP. |
true (povoleno) |
Nenulový časový limit | Pokusí se odeslat nevyřízená data, dokud nevyprší zadaný časový limit a pokud pokus selže, služba Winsock připojení resetuje. |
true (povoleno) |
Časový limit nuly. | Zahodí všechna čekající data. V případě soketu orientovaného na připojení (například TCP) služba Winsock připojení resetuje. |
Zásobník IP adres vypočítá výchozí časové období vypršení časového limitu protokolu IP, které se použije na základě doby odezvy připojení. Ve většině případů je časový limit vypočítaný zásobníkem relevantnější než jeden definovaný aplikací. Toto je výchozí chování soketu LingerState , pokud vlastnost není nastavena.
LingerTime Pokud je vlastnost uložená ve LingerState vlastnosti nastavena vyšší než výchozí časový limit protokolu IP, výchozí časový limit protokolu IP se bude dál používat a přepsat.