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

Int32

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 solicitados 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, os Socket dados pendentes serão descartados para enviar o 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 propriedade ouLingerState.LingerState

A tabela a seguir descreve o comportamento dos possíveis valores 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 padrão do protocolo IP expire.
true (habilitado) Um tempo limite sem zero Tenta enviar dados pendentes até que o tempo limite especificado expire e, se a tentativa falhar, o Winsock redefinirá 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 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 do que o tempo limite de tempo limite do protocolo IP padrão, o tempo limite padrão do protocolo IP ainda será aplicado e substituído.

Aplica-se a