Partilhar via


LingerOption.LingerTime Propriedade

Definição

Obtém ou define a quantidade de tempo para permanecer conectado após a chamada ao método Close() se os dados ainda precisam ser enviados.

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

Valor da propriedade

O tempo, em segundos, para permanecer conectado depois de chamar Close().

Exemplos

O exemplo a seguir exibe o valor dessa propriedade.

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

Comentários

Use esse valor se quiser determinar por quanto tempo um fechado Socket tentará transferir dados não utilizados antes de atingir o tempo limite. Você também pode definir esse valor para o período de tempo limite desejado, em segundos.

Se a Enabled propriedade for truee você definir LingerTime como 0, o descartará todos os Socket dados pendentes a serem enviados no buffer de rede de saída. Se você alterar esse valor, deverá passar a instância alterada LingerOption para o SetSocketOption método ou definir a LingerState propriedade ou LingerState .

A tabela a seguir descreve o comportamento dos valores possíveis da Enabled propriedade e da LingerTime propriedade armazenada na LingerState propriedade .

enable seconds Comportamento
false (desabilitado), o valor padrão O tempo limite não é aplicável(padrão). Tenta enviar dados pendentes para um TCP (soquete orientado à conexão, por exemplo) até que o tempo limite do protocolo IP padrão expire.
true (habilitado) Um tempo limite diferente de zero Tenta enviar dados pendentes até que o tempo limite especificado expire e, se a tentativa falhar, Winsock redefine a conexão.
true (habilitado) Um tempo limite zero. Descarta todos os dados pendentes. Para o TCP (soquete orientado à conexão, por exemplo), o Winsock redefine a conexão.

A pilha de IP calcula o período de tempo limite do protocolo IP padrão a ser usado com base no tempo de viagem de ida e volta da conexão. Na maioria dos casos, o tempo limite calculado pela pilha é mais relevante do que um definido por um aplicativo. Esse é o comportamento padrão de um soquete quando a LingerState propriedade não está definida.

Quando a LingerTime propriedade armazenada na LingerState propriedade for definida como maior que o tempo limite do protocolo IP padrão, o tempo limite do protocolo IP padrão ainda será aplicado e substituído.

Aplica-se a