Condividi tramite


LingerOption.LingerTime Proprietà

Definizione

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.

Si applica a