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
Mary-Kate Olsenasal
2024-12-24 10:39:28914semak imbas

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
}

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
}

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:
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