Socket.LingerState Socket.LingerState Socket.LingerState Socket.LingerState Property

定義

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

プロパティ値

ソケットを閉じているときの待機方法を指定する LingerOptionA LingerOption that specifies how to linger while closing a socket.

例外

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

次のコード例は、 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("");
}

注釈

プロパティ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の使用可能な値に対するメソッドの動作とLingerTimeLingerStateプロパティに格納されているプロパティについて説明します。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.EnabledLingerState.Enabled LingerState.LingerTimeLingerState.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.
trueenabledtrue (enabled) 0以外のタイムアウト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.
trueenabledtrue (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.

プロパティに格納されているプロパティが既定のipプロトコルタイムアウトよりも大きい値に設定されている場合でも、既定のipプロトコルタイムアウトが適用され、上書きされます。LingerTime LingerStateWhen 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.

適用対象