Socket.LingerState Property

Definition

Возвращает или задает значение, указывающее, будет ли объект Socket задерживать закрытие сокета при попытке отправки всех отложенных данных.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

Property Value

LingerOption

Объект LingerOption, указывающий задержку при закрытии сокета.A LingerOption that specifies how to linger while closing a socket.

Exceptions

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Examples

В следующем примере кода демонстрируется применение атрибута LingerState.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("");
}

Remarks

Свойство LingerState изменяет способ, которым Close метод.The LingerState property changes the way Close method behaves. Это свойство задается при изменении условий, при которых подключение может быть сброшено с помощью Winsock.This property when set modifies the conditions under which the connection can be reset by Winsock. Сброс соединения по-прежнему может происходить в зависимости от поведения протокола IP.Connection resets can still occur based on the IP protocol behavior.

Это свойство управляет длительностью времени, в течение которого соединение, ориентированное на соединение, остается открытым после вызова Close, когда данные остаются для отправки.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.

При вызове методов для отправки данных одноранговой сети эти данные помещаются в исходящий сетевой буфер.When you call methods to send data to a peer, this data is placed in the outgoing network buffer. Это свойство можно использовать, чтобы убедиться, что эти данные отправляются на удаленный узел перед тем, как метод Close удаляет подключение.This property can be used to ensure that this data is sent to the remote host before the Close method drops the connection.

Чтобы включить ожидание, создайте экземпляр LingerOption, содержащий нужные значения, и задайте для свойства LingerState значение этого экземпляра.To enable lingering, create a LingerOption instance containing the desired values, and set the LingerState property to this instance.

В следующей таблице описывается поведение метода Close для возможных значений свойства Enabled и свойства LingerTime, хранящегося в свойстве LingerState.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.

Линжерстате. EnabledLingerState.Enabled Линжерстате. ЛинжертимеLingerState.LingerTime ПоведениеBehavior
false (отключено), значение по умолчаниюfalse (disabled), the default value Время ожидания неприменимо (по умолчанию).The time-out is not applicable, (default). Пытается отправить ожидающие данные до истечения времени ожидания протокола IP по умолчанию.Attempts to send pending data until the default IP protocol time-out expires.
true (включено)true (enabled) Ненулевое время ожиданияA nonzero time-out Пытается отправить ожидающие данные до истечения заданного времени ожидания. Если попытка не удалась, Winsock сбрасывает подключение.Attempts to send pending data until the specified time-out expires, and if the attempt fails, then Winsock resets the connection.
true (включено)true (enabled) Нулевое время ожидания.A zero timeout. Отменяет все ожидающие данные.Discards any pending data. Для сокета, ориентированного на подключение (например, TCP), Winsock сбрасывает подключение.For connection-oriented socket (TCP, for example), Winsock resets the connection.

В стеке IP-адресов используется период ожидания протокола IP по умолчанию, используемый в зависимости от времени кругового пути соединения.The IP stack computes the default IP protocol time-out period to use based on the round trip time of the connection. В большинстве случаев время ожидания, вычисленное стеком, больше релевантно, чем определено приложением.In most cases, the time-out computed by the stack is more relevant than one defined by an application. Это поведение по умолчанию для сокета, если не задано свойство LingerState.This is the default behavior for a socket when the LingerState property is not set.

Если свойство LingerTime, хранящееся в свойстве LingerState, установлено больше, чем время ожидания протокола IP по умолчанию, по умолчанию время ожидания протокола IP по-прежнему будет применяться и переопределено.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.

Applies to