Sdílet prostřednictvím


Socket.LingerState Vlastnost

Definice

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.

Platí pro