LingerOption.LingerTime Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 true
e 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.