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 在逾時之前嘗試傳輸未傳送數據的時間長度,請使用此值。您也可以將此值設定為所需的逾時期間,以秒為單位。

Enabled如果 屬性是 ,而且您設定LingerTimetrue0,則會Socket捨棄任何擱置的數據,以在傳出網路緩衝區中傳送。 如果您變更此值,則必須將已改變 LingerOption 的實例傳遞至 SetSocketOption 方法或設定 LingerStateLingerState 屬性。

下表描述屬性可能值 Enabled 的行為,以及 LingerTime 儲存在屬性中的 LingerState 屬性。

enable seconds 行為
false (停用) 預設值 逾時不適用, (預設) 。 嘗試傳送連線導向套接字 (TCP 的擱置數據,例如) 直到預設 IP 通訊協定逾時為止。
true 已啟用 () 非零逾時 嘗試傳送擱置的數據,直到指定的逾時到期為止,如果嘗試失敗,Winsock 會重設連線。
true 已啟用 () 零逾時。 捨棄任何擱置的數據。 針對連線導向套接字 (TCP,例如) ,Winsock 會重設連線。

IP 堆疊會根據連線的來回時間計算要使用的預設IP通訊協定逾時期間。 在大部分情況下,堆疊所計算的逾時比應用程式所定義的逾時還要相關。 當未設定 屬性時 LingerState ,這是套接字的默認行為。

LingerTime當屬性中LingerState儲存的屬性設定大於預設 IP 通訊協定逾時,預設 IP 通訊協定逾時仍會套用並覆寫。

適用於