Bagikan melalui


Socket.LingerState Properti

Definisi

Mendapatkan atau menetapkan nilai yang menentukan apakah Socket akan menunda penutupan soket dalam upaya untuk mengirim semua data yang tertunda.

public:
 property System::Net::Sockets::LingerOption ^ LingerState { System::Net::Sockets::LingerOption ^ get(); void set(System::Net::Sockets::LingerOption ^ value); };
public System.Net.Sockets.LingerOption? LingerState { get; set; }
public System.Net.Sockets.LingerOption LingerState { get; set; }
member this.LingerState : System.Net.Sockets.LingerOption with get, set
Public Property LingerState As LingerOption

Nilai Properti

LingerOption yang menentukan cara berlama-lama saat menutup soket.

Pengecualian

Terjadi kesalahan saat mencoba mengakses soket.

Contoh

Contoh kode berikut menunjukkan penggunaan LingerState properti .

static void ConfigureTcpSocket(Socket^ tcpSocket)
{
     
    // Don't allow another socket to bind to this port.
    tcpSocket->ExclusiveAddressUse = true;
     
    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket->LingerState = gcnew LingerOption(true, 10);
     
    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket->NoDelay = true;
     
    // Set the receive buffer size to 8k
    tcpSocket->ReceiveBufferSize = 8192;
     
    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket->ReceiveTimeout = 1000;
     
    // Set the send buffer size to 8k.
    tcpSocket->SendBufferSize = 8192;
     
    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket->SendTimeout = 1000;
     
    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket->Ttl = 42;
    Console::WriteLine("Tcp Socket configured:");
    Console::WriteLine("  ExclusiveAddressUse {0}", 
        tcpSocket->ExclusiveAddressUse);
    Console::WriteLine("  LingerState {0}, {1}", 
        tcpSocket->LingerState->Enabled,
        tcpSocket->LingerState->LingerTime);
    Console::WriteLine("  NoDelay {0}",
        tcpSocket->NoDelay);
    Console::WriteLine("  ReceiveBufferSize {0}", 
        tcpSocket->ReceiveBufferSize);
    Console::WriteLine("  ReceiveTimeout {0}",
        tcpSocket->ReceiveTimeout);
    Console::WriteLine("  SendBufferSize {0}",
        tcpSocket->SendBufferSize);
    Console::WriteLine("  SendTimeout {0}",
        tcpSocket->SendTimeout);
    Console::WriteLine("  Ttl {0}",
        tcpSocket->Ttl);
    Console::WriteLine("  IsBound {0}",
        tcpSocket->IsBound);
    Console::WriteLine("");
}
static void ConfigureTcpSocket(Socket tcpSocket)
{
    // Don't allow another socket to bind to this port.
    tcpSocket.ExclusiveAddressUse = true;

    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket.LingerState = new LingerOption (true, 10);

    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket.NoDelay = true;

    // Set the receive buffer size to 8k
    tcpSocket.ReceiveBufferSize = 8192;

    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket.ReceiveTimeout = 1000;

    // Set the send buffer size to 8k.
    tcpSocket.SendBufferSize = 8192;

    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket.SendTimeout = 1000;

    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket.Ttl = 42;

    Console.WriteLine("Tcp Socket configured:");

    Console.WriteLine($"  ExclusiveAddressUse {tcpSocket.ExclusiveAddressUse}");

    Console.WriteLine($"  LingerState {tcpSocket.LingerState.Enabled}, {tcpSocket.LingerState.LingerTime}");

    Console.WriteLine($"  NoDelay {tcpSocket.NoDelay}");

    Console.WriteLine($"  ReceiveBufferSize {tcpSocket.ReceiveBufferSize}");

    Console.WriteLine($"  ReceiveTimeout {tcpSocket.ReceiveTimeout}");

    Console.WriteLine($"  SendBufferSize {tcpSocket.SendBufferSize}");

    Console.WriteLine($"  SendTimeout {tcpSocket.SendTimeout}");

    Console.WriteLine($"  Ttl {tcpSocket.Ttl}");

    Console.WriteLine($"  IsBound {tcpSocket.IsBound}");

    Console.WriteLine("");
}

Keterangan

Properti LingerState mengubah perilaku Close metode. Properti ini ketika diatur memodifikasi kondisi di mana koneksi dapat diatur ulang oleh Winsock. Reset koneksi masih dapat terjadi berdasarkan perilaku protokol IP.

Properti ini mengontrol lamanya waktu koneksi berorientasi koneksi akan tetap terbuka setelah panggilan ke Close ketika data tetap dikirim.

Saat Anda memanggil metode untuk mengirim data ke serekan, data ini ditempatkan di buffer jaringan keluar. Properti ini dapat digunakan untuk memastikan bahwa data ini dikirim ke host jarak jauh sebelum Close metode menghilangkan koneksi.

Untuk mengaktifkan lingering, buat instans yang LingerOption berisi nilai yang diinginkan, dan atur LingerState properti ke instans ini.

Tabel berikut ini menjelaskan perilaku Close metode untuk nilai properti yang Enabled mungkin dan properti yang LingerTime disimpan di LingerState properti .

LingerState.Enabled LingerState.LingerTime Aktivitas
false (dinonaktifkan), nilai default Waktu habis tidak berlaku, (default). Upaya untuk mengirim data yang tertunda hingga waktu habis protokol IP default kedaluwarsa.
true (diaktifkan) Waktu habis bukan nol Mencoba mengirim data yang tertunda hingga waktu habis yang ditentukan berakhir, dan jika upaya gagal, maka Winsock mengatur ulang koneksi.
true (diaktifkan) Batas waktu nol. Membuang data yang tertunda. Untuk soket berorientasi koneksi (TCP, misalnya), Winsock mengatur ulang koneksi.

Tumpukan IP menghitung periode waktu habis protokol IP default untuk digunakan berdasarkan waktu pulang pergi koneksi. Dalam kebanyakan kasus, waktu habis yang dihitung oleh tumpukan lebih relevan daripada yang ditentukan oleh aplikasi. Ini adalah perilaku default untuk soket ketika LingerState properti tidak diatur.

Ketika properti yang LingerTime disimpan dalam LingerState properti diatur lebih besar dari waktu habis protokol IP default, batas waktu protokol IP default akan tetap berlaku dan diambil alih.

Berlaku untuk