NetworkStream.DataAvailable == false betyr at det ikke er bytes klare til å leses umiddelbart. Det betyr ikke at en HTTP-respons er fullstendig. En løkke som stopper der, kan avkorte en helt normal SOCKS-nedlasting i et gap mellom pakker.

Etter at SOCKS har opprettet TCP-forbindelsen, gir HTTP-rammeverket fortsatt fullføringsregelen:

  • En body med Content-Length slutter etter de oppgitte innholdsbyttene.
  • En chunked-respons trenger sin avsluttende chunk og relevante trailers.
  • En forbindelsesavgrenset respons slutter med forbindelsen.
  • Noen statuser og responser på HEAD har ingen body.

Les status og headere for å fastslå den gjeldende regelen. Å vente bare på lukking er ikke en generell løsning, fordi en fullstendig HTTP-respons kan la forbindelsen stå åpen. Kapasiteten til én buffer er like lite relevant for lengden på responsen.

Bruk rammeimplementasjonen til HTTP-klienten når den støtter den valgte proxytransporten. På en kompatibel moderne .NET-runtime kan du vurdere den innebygde SOCKS-støtten i HttpClient. En rå implementasjon må bevare parsertilstanden på tvers av delvise headere og body-lesinger, og skille vellykket fullføring fra avbrytelse, tidsavbrudd og uventet EOF. For en ikke-tom leseforespørsel betyr null leste bytes at strømmen er slutt; dette er forskjellig fra at det akkurat nå ikke ligger bytes i køen.

Proxyen kan gjøre tidsgap tydelige, men den gjør ikke en tom mottakskø om til en markør for slutten på meldingen.

Relaterte artikler