LingerOption.LingerTime Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece el período de tiempo que la conexión permanece abierta después de llamar al método Close() si quedan datos pendientes de envío.
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 de propiedad
El tiempo, en segundos, que debe permanecer abierta la conexión después de llamar al método Close().
Ejemplos
En el ejemplo siguiente se muestra el valor de esta propiedad.
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
Comentarios
Use este valor si desea determinar cuánto tiempo un cerrado Socket intentará transferir datos sin envío antes de que se agote el tiempo de espera. También puede establecer este valor en el período de tiempo de espera deseado, en segundos.
Si la Enabled propiedad es true
y se establece LingerTime en 0, Socket descarta los datos pendientes para enviar en el búfer de red saliente. Si cambia este valor, debe pasar la instancia modificada LingerOption al SetSocketOption método o establecer la LingerState propiedad o LingerState .
En la tabla siguiente se describe el comportamiento de los posibles valores de la Enabled propiedad y la LingerTime propiedad almacenada en la LingerState propiedad .
enable |
seconds |
Comportamiento |
---|---|---|
false (deshabilitado), el valor predeterminado |
El tiempo de espera no es aplicable (valor predeterminado). | Intenta enviar datos pendientes para un socket orientado a la conexión (TCP, por ejemplo) hasta que expire el tiempo de espera predeterminado del protocolo IP. |
true (habilitado) |
Tiempo de espera distinto de cero | Intenta enviar datos pendientes hasta que expire el tiempo de espera especificado y, si se produce un error en el intento, Winsock restablece la conexión. |
true (habilitado) |
Un tiempo de espera cero. | Descarta los datos pendientes. En el caso del socket orientado a la conexión (TCP, por ejemplo), Winsock restablece la conexión. |
La pila de IP calcula el período de tiempo de espera predeterminado del protocolo IP que se usará en función del tiempo de ida y vuelta de la conexión. En la mayoría de los casos, el tiempo de espera calculado por la pila es más relevante que uno definido por una aplicación. Este es el comportamiento predeterminado de un socket cuando no se establece la LingerState propiedad .
Cuando la LingerTime propiedad almacenada en la LingerState propiedad se establece mayor que el tiempo de espera predeterminado del protocolo IP, el tiempo de espera predeterminado del protocolo IP se seguirá aplicando e invalidará.