Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengesan Sambungan TCP Tertutup dengan Amanah dalam Pakej `net` Go?

Bagaimanakah Saya Boleh Mengesan Sambungan TCP Tertutup dengan Amanah dalam Pakej `net` Go?

Mary-Kate Olsen
Lepaskan: 2024-12-24 10:39:28
asal
920 orang telah melayarinya

How Can I Reliably Detect Closed TCP Connections in Go's `net` Package?

Memantau Status Sambungan TCP dalam Pakej Bersih

Tugas biasa dalam pelaksanaan pelayan TCP ialah menentukan apabila sambungan pelanggan telah ditutup. Soalan ini meneroka kaedah yang boleh dipercayai untuk mengesan penutupan sambungan dalam pakej Go net.

Menyemak Sambungan Tertutup

Pendekatan yang dicadangkan ialah mencuba kedua-dua operasi baca dan tulis dan semak sama ada mengembalikan ralat sifar. Jika kedua-dua operasi berjaya, sambungan diandaikan terbuka. Walau bagaimanapun, kaedah ini mempunyai had.

Pengesanan Boleh Dipercayai Menggunakan Tamat Masa

Penyelesaian yang lebih dipercayai melibatkan penetapan tarikh akhir bacaan dan percubaan bacaan satu bait. Jika bacaan selesai dengan ralat io.EOF, sambungan dianggap ditutup. Untuk mengelakkan positif palsu disebabkan oleh pelanggan yang perlahan, tarikh akhir bacaan bukan sifar boleh ditetapkan.

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
}
Salin selepas log masuk

Pengesanan Tamat Masa

Jika tamat masa bacaan tamat tempoh, yang disediakan ralat akan melaksanakan antara muka net.Error, dan kaedah Timeout() ralat boleh digunakan untuk mengesahkan sebab.

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Connection timed out
}
Salin selepas log masuk

Pertimbangan Go 1.7

Dalam Go 1.7 , bacaan sifar-bait kembali serta-merta tanpa ralat. Oleh itu, memastikan sekurang-kurangnya satu bait dibaca adalah penting untuk mengelakkan positif palsu.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Sambungan TCP Tertutup dengan Amanah dalam Pakej `net` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan