NetworkStream.DataAvailable == false reiškia, kad nėra baitų, paruoštų iš karto skaityti. Tai nereiškia, kad HTTP atsakymas baigtas. Ten sustojusi kilpa gali nukirpti visiškai normalų SOCKS atsisiuntimą per tarpą tarp paketų.

Po to, kai SOCKS nustato TCP ryšį, užbaigimo taisyklę vis dar pateikia HTTP įrėminimas:

  • Content-Length turinys baigiasi po deklaruotų turinio baitų.
  • Chunked atsakymui reikia baigiančio chunk ir taikomų trailer.
  • Ryšiu apibrėžtas atsakymas baigiasi kartu su ryšiu.
  • Kai kurie statusai ir atsakymai į HEAD neturi turinio.

Skaitykite statusą ir antraštes, kad nustatytumėte taikomą taisyklę. Laukti vien uždarymo nėra bendras sprendimas, nes užbaigtas HTTP atsakymas gali palikti ryšį atvirą. Vieno buferio talpa taip pat nesusijusi su atsakymo ilgiu.

Naudokite HTTP kliento įrėminimo įgyvendinimą, kai jis palaiko pasirinktą proxy transportą. Suderinamoje šiuolaikinėje .NET vykdymo aplinkoje apsvarstykite HttpClient vietinį SOCKS palaikymą. Neapdorotas įgyvendinimas turi išsaugoti analizės būseną tarp dalinių antraščių ir turinio skaitymų bei atskirti sėkmingą užbaigimą nuo atšaukimo, laiko limito ir netikėto EOF. Ne tuščioje skaitymo užklausoje nulis perskaitytų baitų reiškia, kad srautas baigėsi; tai skiriasi nuo to, kad šiuo metu eilėje nėra baitų.

Proxy gali padaryti laiko tarpus pastebimus, bet jis nepavers tuščios priėmimo eilės žinutės pabaigos žyme.

Susiję straipsniai