LingerOption.LingerTime Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta il periodo di tempo durante il quale la connessione deve restare attiva dopo la chiamata del metodo Close() se restano dati da inviare.
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
Valore della proprietà
Tempo di permanenza della connessione, espresso in secondi, dopo la chiamata a Close().
Esempio
Nell'esempio seguente viene visualizzato il valore di questa proprietà.
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
Commenti
Usare questo valore se si vuole determinare la durata Socket del tentativo di trasferimento di dati non inviati prima del timeout. È anche possibile impostare questo valore sul periodo di timeout desiderato, in secondi.
Se la Enabled proprietà è true
, e si imposta LingerTime su 0, i Socket dati in sospeso vengono ignorati per l'invio nel buffer di rete in uscita. Se si modifica questo valore, è necessario passare l'istanza modificata LingerOption al SetSocketOption metodo o impostare la LingerState proprietà o LingerState .
Nella tabella seguente viene descritto il comportamento per i valori possibili della Enabled proprietà e la LingerTime proprietà archiviata nella LingerState proprietà .
enable |
seconds |
Comportamento |
---|---|---|
false (disabilitato), il valore predefinito |
Il timeout non è applicabile(impostazione predefinita). | Tenta di inviare dati in sospeso per un socket orientato alla connessione (TCP, ad esempio) fino alla scadenza del timeout del protocollo IP predefinito. |
true (abilitato) |
Timeout diverso da zero | Tenta di inviare dati in sospeso fino alla scadenza del timeout specificato e, se il tentativo ha esito negativo, Winsock reimposta la connessione. |
true (abilitato) |
Timeout zero. | Elimina tutti i dati in sospeso. Per il socket orientato alla connessione (TCP, ad esempio), Winsock reimposta la connessione. |
Lo stack IP calcola il timeout predefinito del protocollo IP da usare in base al tempo di round trip della connessione. Nella maggior parte dei casi, il timeout calcolato dallo stack è più rilevante di uno definito da un'applicazione. Si tratta del comportamento predefinito per un socket quando la LingerState proprietà non è impostata.
Quando la LingerTime proprietà archiviata nella LingerState proprietà è maggiore del timeout del protocollo IP predefinito, il timeout predefinito del protocollo IP verrà comunque applicato e sottoposto a override.