NetworkStream.DataAvailable HTTP javobining tugashini bildirmaydi
Tugash sharti sifatida NetworkStream.DataAvailable o'rniga xabar ramkalashdan foydalanib, kesilgan HTTP yuklab olishlarning oldini oling.
NetworkStream.DataAvailable == false darhol o'qish uchun tayyor bayt yo'qligini bildiradi. Bu HTTP javobi tugagan degani emas. Shu yerda to'xtaydigan sikl paketlar orasidagi tanaffusda butunlay normal SOCKS yuklab olishni kesib qo'yishi mumkin.
SOCKS TCP ulanishini o'rnatgandan keyin ham tugallanish qoidasini HTTP ramkalash beradi:
- Content-Length tanasi e'lon qilingan tarkib baytlaridan keyin tugaydi.
- Chunked javob o'zining yakuniy chunk va tegishli trailerlarni talab qiladi.
- Ulanish bilan chegaralangan javob ulanish bilan birga tugaydi.
- Ba'zi statuslar va HEAD ga javoblarning tanasi yo'q.
Qo'llaniladigan qoidani aniqlash uchun status va sarlavhalarni o'qing. Faqat yopilishni kutish umumiy yechim emas, chunki to'liq HTTP javobi ulanishni ochiq qoldirishi mumkin. Bitta buferning sig'imi ham javob uzunligiga bog'liq emas.
Tanlangan proksi transportini HTTP mijozi ramkalashi qo'llab-quvvatlasa, undan foydalaning. Mos zamonaviy .NET ish muhitida HttpClient ning o'rnatilgan SOCKS qo'llab-quvvatlashini ko'rib chiqing. Xom tatbiq qismli sarlavhalar va tana o'qishlari orasida tahlil holatini saqlashi hamda muvaffaqiyatli tugallanishni bekor qilish, taym-aut va kutilmagan EOF dan ajratishi kerak. Bo'sh bo'lmagan o'qish so'rovida nol bayt o'qilishi oqim tugaganligini bildiradi; bu ayni damda navbatda bayt yo'qligidan farq qiladi.
Proksi vaqt tanaffuslarini ko'zga tashlanadigan qilishi mumkin, lekin bo'sh qabul navbatini xabar tugashi belgisiga aylantirmaydi.