NetworkStream.DataAvailable == false tähendab, et ühtegi baiti ei ole kohe lugemiseks valmis. See ei tähenda, et HTTP-vastus on lõppenud. Seal peatuv tsükkel võib pakettidevahelise pausi ajal kärpida täiesti tavalise SOCKS-allalaadimise.

Pärast seda, kui SOCKS on TCP-ühenduse loonud, annab lõpetamise reegli endiselt HTTP raamistus:

  • Content-Length'iga keha lõpeb deklareeritud sisubaitide järel.
  • Chunked-vastus vajab lõplikku chunk'i ja asjakohaseid trailereid.
  • Ühendusega piiritletud vastus lõpeb koos ühendusega.
  • Mõnel olekukoodil ja HEAD-vastusel ei ole keha.

Lugege olekut ja päiseid, et teha kindlaks kohaldatav reegel. Ainult sulgemise ootamine ei ole üldine lahendus, sest täielik HTTP-vastus võib ühenduse avatuks jätta. Ühe puhvri maht on sama vähe seotud vastuse pikkusega.

Kasutage HTTP-kliendi raamistuse rakendust, kui see toetab valitud puhverserveri transporti. Ühilduvas kaasaegses .NETi käituskeskkonnas kaaluge HttpClienti loomulikku SOCKS-tuge. Toores rakendus peab hoidma parsimisolekut osaliste päiste ja keha lugemiste vahel ning eristama edukat lõpetamist tühistamisest, ajalõppest ja ootamatust EOF-ist. Mitte-tühja lugemispäringu korral tähendab null loetud baiti, et voog on lõppenud; see erineb sellest, et hetkel ei ole järjekorras ühtegi baiti.

Puhverserver võib ajapause märgatavaks teha, kuid see ei muuda tühja vastuvõtujärjekorda sõnumi lõpu markeriks.

Seotud artiklid