次の方法で共有


LingerOption.LingerTime プロパティ

定義

送信するデータが残っている場合に、Close() メソッドを呼び出した後で接続を維持する時間を取得または設定します。

public:
 property int LingerTime { int get(); void set(int value); };
public int LingerTime { get; set; }
member this.LingerTime : int with get, set
Public Property LingerTime As Integer

プロパティ値

Close() が呼び出された後、接続を維持する秒数。

次の例では、このプロパティの値を表示します。

Console::Write("This application will timeout if Send does not return within ");
Console::WriteLine(Encoding::ASCII->GetString(s->GetSocketOption(SocketOptionLevel::Socket, SocketOptionName::SendTimeout, 4)));

// Blocks until send returns.
int i = s->Send(msg);

// Blocks until read returns.
array<Byte>^ bytes = gcnew array<Byte>(1024);

s->Receive(bytes);

// Displays to the screen.
Console::WriteLine(Encoding::ASCII->GetString(bytes));
s->Shutdown(SocketShutdown::Both);
Console::Write("If data remains to be sent, this application will stay open for ");
Console::WriteLine(safe_cast<LingerOption^>(s->GetSocketOption(SocketOptionLevel::Socket, SocketOptionName::Linger))->LingerTime.ToString());
s->Close();
Console.WriteLine("This application will timeout if Send does not return within " + Encoding.ASCII.GetString(s.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 4)));

// blocks until send returns
int i = s.Send(msg);

// blocks until read returns
byte[] bytes = new byte[1024];

s.Receive(bytes);

// Display to the screen
Console.WriteLine(Encoding.ASCII.GetString(bytes));
s.Shutdown(SocketShutdown.Both);
Console.WriteLine("If data remains to be sent, this application will stay open for " + ((LingerOption)s.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger)).LingerTime.ToString());
s.Close();
    Console.WriteLine(("This application will timeout if Send does not return within " + Encoding.ASCII.GetString(s.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 4))))
    ' blocks until send returns
    Dim i As Integer = s.Send(msg)

    ' blocks until read returns
    Dim bytes(1024) As Byte
    s.Receive(bytes)

    'Display to the screen
    Console.WriteLine(Encoding.ASCII.GetString(bytes))
    s.Shutdown(SocketShutdown.Both)

    Console.WriteLine(("If data remains to be sent, this application will stay open for " + CType(s.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger), LingerOption).LingerTime.ToString()))
    s.Close()
End Sub

注釈

この値は、閉じた Socket データがタイムアウトするまでに未送信データの転送を試みる時間を決定する場合に使用します。また、この値を目的のタイムアウト期間 (秒単位) に設定することもできます。

プロパティが Enabledtrue、0 に設定 LingerTime すると、 Socket は送信ネットワーク バッファーで送信する保留中のデータを破棄します。 この値を変更する場合は、変更されたLingerOptionインスタンスを メソッドにSetSocketOption渡すか、 または LingerState プロパティを設定するLingerState必要があります。

次の表では、 プロパティと、 プロパティに格納されているプロパティのEnabled可能な値のLingerTimeLingerState動作について説明します。

enable seconds 動作
false (無効)、既定値 タイムアウトは適用されません (既定値)。 既定の IP プロトコルタイムアウトの期限が切れるまで、接続指向ソケット (TCP など) の保留中のデータの送信を試みます。
true (有効) 0 以外のタイムアウト 指定したタイムアウトが切れるまで保留中のデータの送信を試み、試行が失敗した場合、Winsock は接続をリセットします。
true (有効) タイムアウトが 0 です。 保留中のデータを破棄します。 接続指向ソケット (TCP など) の場合、Winsock は接続をリセットします。

IP スタックは、接続のラウンド トリップ時間に基づいて、使用する既定の IP プロトコルタイムアウト期間を計算します。 ほとんどの場合、スタックによって計算されたタイムアウトは、アプリケーションによって定義されたタイムアウトよりも関連性が高くなります。 これは、 プロパティが設定されていない場合のソケットの既定の LingerState 動作です。

プロパティに LingerTime 格納されている LingerState プロパティが既定の IP プロトコル タイムアウトより大きく設定されている場合でも、既定の IP プロトコルタイムアウトは引き続き適用され、オーバーライドされます。

適用対象