Kendalikan EOF dalam Gelung Baca SOCKS Python
Kendalikan EOF secara eksplisit dalam gelung baca tepat SOCKS dan bukannya menganggap sambungan tertutup sebagai tamat masa yang tidak pernah tiba.
Satu gelung mahukan lapan bait balasan SOCKS. Ia telah menerima tiga. Bacaan seterusnya mengembalikan b'', dan gelung menambahnya, memeriksa panjang, dan mencuba lagi tanpa henti.
Itu pepijat pengendalian EOF, bukan proksi perlahan yang memerlukan tamat masa lebih panjang. Dalam penerimaan soket aliran biasa, rentetan bait kosong bermakna rakan telah memutuskan sambungan. Lima bait yang tinggal tidak akan tiba pada sambungan itu.
Pembantu baca tepat memerlukan tiga hasil berbeza: mengumpul ketulan tidak kosong, gagal pada EOF sebelum panjang yang diperlukan, dan menyebarkan tamat masa atau ralat soket lain. Kes-kes itu tidak sepatutnya bercantum menjadi satu gelung cubaan semula generik.
Tetapkan tamat masa yang dimaksudkan untuk soket sebelum operasi, dan baca panjang medan yang ditentukan oleh protokol proksi. Satu penerimaan hanya boleh mengembalikan sebahagian balasan. Sebaliknya, meminta penimbal tetap yang besar tidak menjadikan setiap alamat SOCKS mempunyai panjang itu.
Jangan baiki kebergantungan dengan menampal coretan MSG_WAITALL lama ke dalam sumbernya dan menganggapnya meliputi EOF, isyarat dan tingkah laku platform. Utamakan pembetulan yang disokong oleh pelaksanaan yang diselenggara, atau laksanakan kontrak pembantu secara sengaja apabila penghurai ialah kod anda.
Simpan berapa banyak bait dijangka dan diterima, tanpa mencatat muatan kelayakan. “EOF selepas tiga daripada lapan bait balasan” menerangkan pertukaran yang rosak jauh lebih baik daripada “proksi tergantung lagi”.