Socket.LingerState Свойство

Определение

Возвращает или задает значение, указывающее, будет ли объект Socket задерживать закрытие сокета при попытке отправки всех отложенных данных.

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

Значение свойства

Объект LingerOption, указывающий задержку при закрытии сокета.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Примеры

В следующем примере кода демонстрируется использование LingerState свойство.

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

Комментарии

Свойство LingerState изменяет поведение Close метода. Это свойство при установке изменяет условия, при которых Winsock может сбросить подключение. Сброс подключения по-прежнему может происходить в зависимости от поведения протокола IP.

Это свойство определяет период времени, в течение времени, когда подключение, ориентированное на подключение, будет оставаться открытым после вызова Close , когда данные еще не отправляются.

При вызове методов для отправки данных в одноранговый узел эти данные помещаются в исходящий сетевой буфер. Это свойство можно использовать для отправки этих данных на удаленный узел до того, Close как метод разопустит подключение.

Чтобы включить затяжку, создайте LingerOption экземпляр, содержащий нужные значения, и присвойте свойству LingerState значение этого экземпляра.

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

LingerState.Enabled LingerState.LingerTime Поведение
false (отключено), значение по умолчанию Время ожидания неприменимо (по умолчанию). Пытается отправить отложенные данные до истечения времени ожидания протокола IP по умолчанию.
true (включено) Ненулевое время ожидания Пытается отправить отложенные данные, пока не истечет указанное время ожидания, и в случае сбоя попытки Winsock сбрасывает подключение.
true (включено) Нулевое время ожидания. Удаляет все ожидающие данные. Для сокета, ориентированного на подключение (например, TCP), Winsock сбрасывает подключение.

Стек IP-адресов вычисляет период времени ожидания протокола IP по умолчанию для использования на основе времени кругового пути подключения. В большинстве случаев время ожидания, вычисленное стеком, имеет большее значение, чем определенное приложением. Это поведение по умолчанию для сокета, LingerState если свойство не задано.

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

Применяется к