NetworkStream.DataAvailable == false betyder, at der ikke er bytes klar til at blive læst med det samme. Det betyder ikke, at et HTTP-svar er komplet. Et loop, der stopper der, kan afkorte en helt normal SOCKS-download under et hul mellem pakker.

Når SOCKS har oprettet TCP-forbindelsen, leverer HTTP-rammerne stadig afslutningsreglen:

  • En body med Content-Length slutter efter de angivne indholdsbytes.
  • Et chunked-svar kræver sit afsluttende chunk og relevante trailere.
  • Et forbindelsesafgrænset svar slutter med forbindelsen.
  • Nogle statusser og svar på HEAD har ingen body.

Læs status og headere for at fastslå den gældende regel. At vente på lukning alene er ikke en generel løsning, fordi et komplet HTTP-svar kan lade forbindelsen være åben. En buffers kapacitet er lige så irrelevant for svarets længde.

Brug HTTP-klientens rammeimplementering, når den understøtter den valgte proxytransport. På en kompatibel moderne .NET-runtime kan du overveje HttpClients indbyggede SOCKS-understøttelse. En rå implementering skal bevare parsingstilstand på tværs af delvise headere og body-læsninger og skelne vellykket afslutning fra annullering, timeout og uventet EOF. For en ikke-tom læseanmodning betyder nul læste bytes, at streamen er slut; det er forskelligt fra, at der lige nu ikke er bytes i køen.

Proxyen kan gøre tidsmæssige huller tydelige, men den gør ikke en tom modtagelseskø til en markør for beskedens afslutning.

Relaterede artikler