Bir döngü bir SOCKS yanıtının sekiz baytını ister. Üçünü almıştır. Sonraki okuma b'' döndürür ve döngü onu ekler, uzunluğu kontrol eder ve sonsuza kadar yeniden dener.

Bu bir EOF işleme hatasıdır, daha uzun bir zaman aşımına ihtiyaç duyan yavaş bir proxy değildir. Normal bir akış soketi alımında, boş bayt dizesi eşin bağlantıyı kestiği anlamına gelir. Kalan beş bayt o bağlantıdan gelmeyecektir.

Tam okuma yardımcısının üç ayrı sonuca ihtiyacı vardır: boş olmayan parçaları biriktirmek, gerekli uzunluktan önce EOF'ta başarısız olmak ve bir zaman aşımını veya başka bir soket hatasını iletmek. Bu durumlar tek bir genel yeniden deneme döngüsünde birleşmemelidir.

İşlemden önce soketin amaçlanan zaman aşımını ayarlayın ve proxy protokolünün belirlediği alan uzunluklarını okuyun. Tek bir alım bir yanıtın yalnızca bir bölümünü döndürebilir. Tersine, büyük sabit bir tampon istemek her SOCKS adresini o uzunlukta yapmaz.

Eski bir MSG_WAITALL parçasını kaynağına yapıştırıp EOF, sinyaller ve platform davranışını kapsadığını varsayarak bir bağımlılığı onarmayın. Bakımı yapılan uygulamanın desteklenen düzeltmesini tercih edin veya ayrıştırıcı sizin kodunuzsa yardımcının sözleşmesini bilinçli olarak uygulayın.

Kimlik bilgisi yüklerini günlüğe kaydetmeden kaç baytın beklendiğini ve alındığını saklayın. “Sekiz yanıt baytının üçünden sonra EOF” bozuk alışverişi “proxy yine takıldı”dan çok daha iyi açıklar.

İlgili makaleler