Socket.LingerState Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob der Socket bei einem Versuch, alle ausstehenden Daten zu senden, das Schließen eines Sockets verzögert, oder legt diesen fest.Gets or sets a value that specifies whether the Socket will delay closing a socket in an attempt to send all pending data.

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; }
member this.LingerState : System.Net.Sockets.LingerOption with get, set
Public Property LingerState As LingerOption

Eigenschaftswert

Eine LingerOption, die angibt, wie der Nachlauf während des Schließens eines Sockets erfolgen soll.A LingerOption that specifies how to linger while closing a socket.

Ausnahmen

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

Der Socket wurde geschlossen.The Socket has been closed.

Beispiele

Im folgenden Codebeispiel wird die Verwendung des LingerState-Attributs veranschaulicht.The following code example demonstrates the use of the LingerState property.

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 = gcnew 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 {0}", 
        tcpSocket->ExclusiveAddressUse);
    Console::WriteLine("  LingerState {0}, {1}", 
        tcpSocket->LingerState->Enabled,
        tcpSocket->LingerState->LingerTime);
    Console::WriteLine("  NoDelay {0}",
        tcpSocket->NoDelay);
    Console::WriteLine("  ReceiveBufferSize {0}", 
        tcpSocket->ReceiveBufferSize);
    Console::WriteLine("  ReceiveTimeout {0}",
        tcpSocket->ReceiveTimeout);
    Console::WriteLine("  SendBufferSize {0}",
        tcpSocket->SendBufferSize);
    Console::WriteLine("  SendTimeout {0}",
        tcpSocket->SendTimeout);
    Console::WriteLine("  Ttl {0}",
        tcpSocket->Ttl);
    Console::WriteLine("  IsBound {0}",
        tcpSocket->IsBound);
    Console::WriteLine("");
}
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 die Art und Weise, wie Close Methode verhält.The LingerState property changes the way Close method behaves. Diese Eigenschaft, wenn Set die Bedingungen ändert, unter denen die Verbindung von Winsock zurückgesetzt werden kann.This property when set modifies the conditions under which the connection can be reset by Winsock. Verbindungs Aufstellungen können weiterhin basierend auf dem IP-Protokoll Verhalten auftreten.Connection resets can still occur based on the IP protocol behavior.

Diese Eigenschaft steuert die Zeitspanne, in der eine Verbindungs orientierte Verbindung nach einem Aufruf von Close geöffnet bleibt, wenn die Daten noch gesendet werden sollen.This property controls the length of time that a connection-oriented connection will remain open after a call to Close when data remains to be sent.

Wenn Sie Methoden zum Senden von Daten an einen Peer aufzurufen, werden diese Daten im ausgehenden Netzwerk Puffer platziert.When you call methods to send data to a peer, this data is placed in the outgoing network buffer. Diese Eigenschaft kann verwendet werden, um sicherzustellen, dass diese Daten an den Remote Host gesendet werden, bevor die Close Methode die Verbindung löscht.This property can be used to ensure that this data is sent to the remote host before the Close method drops the connection.

Erstellen Sie eine LingerOption-Instanz, die die gewünschten Werte enthält, und legen Sie die LingerState-Eigenschaft auf diese Instanz fest, um einen veralteten Wert zu aktivieren.To enable lingering, create a LingerOption instance containing the desired values, and set the LingerState property to this instance.

In der folgenden Tabelle wird das Verhalten der Close-Methode für die möglichen Werte der Enabled-Eigenschaft und die LingerTime-Eigenschaft beschrieben, die in der LingerState-Eigenschaft gespeichert ist.The following table describes the behavior of the Close method for the possible values of the Enabled property and the LingerTime property stored in the LingerState property.

LingerState. aktiviertLingerState.Enabled LingerState. LingerTimeLingerState.LingerTime VerhaltenBehavior
false (deaktiviert), der Standardwertfalse (disabled), the default value Das Timeout ist nicht anwendbar (Standard).The time-out is not applicable, (default). Versucht, ausstehende Daten zu senden, bis der Standard-IP-Protokoll Timeout abläuft.Attempts to send pending data until the default IP protocol time-out expires.
true (aktiviert)true (enabled) Ein Timeout ungleich 0 (null)A nonzero time-out Versucht, ausstehende Daten zu senden, bis das angegebene Timeout abläuft. wenn der Versuch fehlschlägt, setzt Winsock die Verbindung zurück.Attempts to send pending data until the specified time-out expires, and if the attempt fails, then Winsock resets the connection.
true (aktiviert)true (enabled) Ein Timeout von NULL.A zero timeout. Verwirft alle ausstehenden Daten.Discards any pending data. Für Verbindungs orientierten Socket (z. b. TCP) setzt Winsock die Verbindung zurück.For connection-oriented socket (TCP, for example), Winsock resets the connection.

Der IP-Stapel berechnet den Standard Timeout Zeitraum für das IP-Protokoll, der basierend auf der Roundtripzeit der Verbindung verwendet werden soll.The IP stack computes the default IP protocol time-out period to use based on the round trip time of the connection. In den meisten Fällen ist der durch den Stapel berechnete Timeout relevanter als der von einer Anwendung definierte Timeout.In most cases, the time-out computed by the stack is more relevant than one defined by an application. Dies ist das Standardverhalten für einen Socket, wenn die LingerState-Eigenschaft nicht festgelegt ist.This is the default behavior for a socket when the LingerState property is not set.

Wenn die LingerTime-Eigenschaft, die in der LingerState-Eigenschaft gespeichert ist, größer als das Standard Timeout für den IP-Protokoll Wert ist, wird das Standard Timeout für das IP-Protokoll weiterhin angewendet und außer Kraft gesetzt.When the LingerTime property stored in the LingerState property is set greater than the default IP protocol time-out, the default IP protocol time-out will still apply and override.

Gilt für: