Freigeben über


Socket.LingerState Eigenschaft

Definition

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob das Socket Schließen eines Sockets in einem Versuch, alle ausstehenden Daten zu senden, verzögert wird.

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

Eigenschaftswert

A LingerOption that specifies how to linger while closing a socket.

Ausnahmen

Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.

Das Socket wurde geschlossen.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der LingerState Eigenschaft veranschaulicht.

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

Hinweise

Die LingerState Eigenschaft ändert das Verhalten der Close Methode. Diese Eigenschaft, wenn festgelegt wird, ändert die Bedingungen, unter denen die Verbindung von Winsock zurückgesetzt werden kann. Verbindungszurücksetzungen können weiterhin basierend auf dem IP-Protokollverhalten auftreten.

Diese Eigenschaft steuert, wie lange eine verbindungsorientierte Verbindung nach einem Aufruf Close geöffnet bleibt, wenn Daten gesendet werden sollen.

Wenn Sie Methoden zum Senden von Daten an einen Peer aufrufen, werden diese Daten im ausgehenden Netzwerkpuffer platziert. Diese Eigenschaft kann verwendet werden, um sicherzustellen, dass diese Daten an den Remotehost gesendet werden, bevor die Methode die Close Verbindung abbricht.

Um das Anhalten zu ermöglichen, erstellen Sie eine LingerOption Instanz, die die gewünschten Werte enthält, und legen Sie die LingerState Eigenschaft auf diese Instanz fest.

In der folgenden Tabelle wird das Verhalten der Close Methode für die möglichen Werte der Enabled Eigenschaft und der LingerTime in der LingerState Eigenschaft gespeicherten Eigenschaft beschrieben.

LingerState.Enabled LingerState.LingerTime Verhalten
false (deaktiviert), Standardwert Das Timeout ist nicht anwendbar (Standard). Versucht, ausstehende Daten zu senden, bis das Standardmäßige IP-Protokoll-Timeout abläuft.
true (aktiviert) Ein Nichtzero-Timeout Versucht, ausstehende Daten zu senden, bis das angegebene Timeout abläuft, und wenn der Versuch fehlschlägt, setzt Winsock die Verbindung zurück.
true (aktiviert) Ein Nulltimeout. Verwirft alle ausstehenden Daten. Bei verbindungsorientiertem Socket (z. B. TCP) setzt Winsock die Verbindung zurück.

Der IP-Stapel berechnet den Standardtimeoutzeitraum des IP-Protokolls basierend auf der Roundtripzeit der Verbindung. In den meisten Fällen ist das vom Stapel berechnete Timeout relevanter als ein von einer Anwendung definiertes Timeout. Dies ist das Standardverhalten für einen Socket, wenn die LingerState Eigenschaft nicht festgelegt ist.

Wenn die LingerTime in der LingerState Eigenschaft gespeicherte Eigenschaft größer als das Standardtimeout des IP-Protokolls festgelegt ist, wird das Standardtimeout des IP-Protokolls weiterhin angewendet und außer Kraft gesetzt.

Gilt für: