Cara Mengesan Pemutusan Sambungan Klien TCP
TCP, protokol penghantaran yang boleh dipercayai, memastikan integriti dan penghantaran data. Walau bagaimanapun, apabila pelanggan memutuskan sambungan lebih awal atau kehilangan sambungan rangkaian, ia menjadi penting bagi pelayan untuk mengesan dan mengendalikan senario sedemikian.
Mengesan Pemutusan Teratur
Satu-satunya kaedah yang boleh dipercayai untuk mengesan pemutusan sambungan pelanggan yang teratur adalah melalui operasi baca. Apabila klien menghantar arahan tutup, fungsi read() akan mengembalikan 0, menunjukkan penamatan teratur sambungan.
Mengesan Sambungan Terputus
Tidak seperti terputus sambungan, sambungan yang rosak memerlukan pendekatan yang lebih aktif. Percubaan untuk menulis data kepada pelanggan yang terputus sambungan akhirnya akan mencetuskan respons daripada TCP. Operasi tulis akan gagal dengan kod ralat (ECONNRESET atau "sambungan tamat masa") selepas berbilang percubaan semula dan tamat masa, menunjukkan sambungan terputus.
Baca Tamat Masa dan Pengendalian Ralat
Untuk mengelakkan hang, tamat masa bacaan yang munasabah harus ditetapkan. Jika operasi baca melebihi tamat masa ini, sambungan harus ditamatkan. Mewujudkan mekanisme degupan jantung juga boleh membantu mengesan pelanggan yang tidak aktif.
Perangkap
Fungsi ioctl() dengan hujah FIONREAD bukanlah kaedah yang berkesan untuk mengesan putus sambungan. FIONREAD hanya menunjukkan bilangan bait dalam penimbal terima soket, yang dengan sendirinya bukan penunjuk yang boleh dipercayai bagi pemutusan sambungan pelanggan.
Atas ialah kandungan terperinci Bagaimanakah Pelayan Boleh Mengesan Pemutusan Sambungan Pelanggan TCP dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!