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

소켓을 닫는 동안 링거하는 방법을 지정하는 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 (사용) 0이 아닌 시간 제한 지정된 제한 시간이 만료될 때까지 보류 중인 데이터를 보내려고 시도하고 시도가 실패하면 Winsock이 연결을 다시 설정합니다.
true (사용) 0 시간 제한입니다. 보류 중인 모든 데이터를 삭제합니다. 예를 들어 연결 지향 소켓(예: TCP)의 경우 Winsock은 연결을 다시 설정합니다.

IP 스택은 연결의 왕복 시간에 따라 사용할 기본 IP 프로토콜 제한 시간을 계산합니다. 대부분의 경우에서 시간 제한이 스택에 의해 계산 애플리케이션에 의해 정의 된 보다 상대적입니다. 속성이 설정되지 않은 경우 소켓의 LingerState 기본 동작입니다.

속성에 LingerTime LingerState 저장된 속성이 기본 IP 프로토콜 제한 시간보다 크게 설정되면 기본 IP 프로토콜 제한 시간이 계속 적용되고 재정의됩니다.

적용 대상