Bir dövrə SOCKS cavabının səkkiz baytını istəyir. Üçünü alıb. Növbəti oxuma b'' qaytarır, dövrə onu əlavə edir, uzunluğu yoxlayır və sonsuza qədər yenidən cəhd edir.

Bu, EOF idarəetmə xətasıdır, daha uzun taym-aut tələb edən yavaş proksi deyil. Normal axın-soket qəbulu üçün boş bayt sətri həmsöhbətin bağlantını kəsdiyini bildirir. Qalan beş bayt həmin bağlantıda gəlməyəcək.

Dəqiq oxuma köməkçisinə üç fərqli nəticə lazımdır: boş olmayan hissələri yığmaq, tələb olunan uzunluqdan əvvəl EOF-da uğursuz olmaq və taym-aut və ya digər soket xətasını ötürmək. Bu hallar bir ümumi təkrar cəhd dövrəsində birləşməməlidir.

Əməliyyatdan əvvəl soketin nəzərdə tutulan taym-autunu təyin edin və proksi protokolunun müəyyən etdiyi sahə uzunluqlarını oxuyun. Tək bir qəbul cavabın yalnız bir hissəsini qaytara bilər. Əksinə, böyük sabit bufer istəmək hər SOCKS ünvanının həmin uzunluqda olması demək deyil.

Köhnə MSG_WAITALL parçasını mənbəyə yapışdırıb onun EOF, siqnallar və platforma davranışını əhatə etdiyini fərz etməklə asılılığı düzəltməyin. Saxlanılan tətbiqin dəstəklənən düzəlişinə üstünlük verin və ya parser sizin kodunuzdursa, köməkçinin müqaviləsini qəsdən tətbiq edin.

Nə qədər bayt gözlənildiyini və alındığını saxlayın, etimad məlumatlarının yüklərini qeyd etmədən. “Səkkiz cavab baytından üçündən sonra EOF” pozulmuş mübadiləni “proksi yenidən dondu”dan qat-qat yaxşı izah edir.

Əlaqəli məqalələr