Поделиться через


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 = 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 по умолчанию по-прежнему применяется и переопределяется.

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