Python SOCKS o'qish siklida EOF bilan ishlash
Yopilgan ulanishni hech qachon kelmaydigan taym-aut deb hisoblash o'rniga, SOCKS aniq o'qish siklida EOF ni aniq boshqaring.
Bir sikl SOCKS javobining sakkiz baytini xohlaydi. U uchtasini oldi. Keyingi o'qish b'' qaytaradi, sikl uni qo'shadi, uzunligini tekshiradi va abadiy qayta urinadi.
Bu EOF bilan ishlashdagi xato, uzoqroq taym-aut kerak bo'ladigan sekin proksi emas. Oddiy oqim soketi qabulida bo'sh bayt satri qarshi tomon uzilganini bildiradi. Qolgan besh bayt bu ulanishda kelmaydi.
Aniq o'qish yordamchisiga uch xil natija kerak: bo'sh bo'lmagan qismlarni to'plash, kerakli uzunlikdan oldin EOF da muvaffaqiyatsiz bo'lish va taym-aut yoki boshqa soket xatosini uzatish. Bu holatlar bitta umumiy qayta urinish siklida birlashmasligi kerak.
Amaldan oldin soketning mo'ljallangan taym-autini o'rnating va proksi protokoli belgilagan maydon uzunliklarini o'qing. Bitta qabul javobning faqat bir qismini qaytarishi mumkin. Aksincha, katta qat'iy bufer so'rash har bir SOCKS manzilni shu uzunlikda qilmaydi.
Bog'liqlikni uning manbasiga eski MSG_WAITALL parchasinini yopishtirib, u EOF, signallar va platforma xatti-harakatlarini qamrab oladi deb o'ylab tuzatmang. Qo'llab-quvvatlanadigan tatbiqning qo'llab-quvvatlangan tuzatishini afzal ko'ring yoki tahlil qiluvchi sizning kodingiz bo'lsa, yordamchi shartnomasini ataylab amalga oshiring.
Qancha bayt kutilgani va olinganini saqlang, hisob ma'lumotlari yuklarini jurnalga yozmasdan. «Sakkiz javob baytidan uchtasidan keyin EOF» buzilgan almashinuvni «proksi yana qotib qoldi» dan ancha yaxshi tushuntiradi.