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

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

  • En body med Content-Length slutter etter de oppgitte innholdsbyttene.
  • Et chunked-svar trenger sin avsluttende chunk og relevante trailers.
  • Et tilkoblingsavgrenset svar slutter med tilkoblingen.
  • Noen statuser og svar 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 et fullstendig HTTP-svar kan la tilkoblingen stå åpen. Kapasiteten til én buffer er like lite relevant for svarets lengde.

Bruk HTTP-klientens rammeimplementasjon når den støtter den valgte proxytransporten. På en kompatibel moderne .NET-runtime kan du vurdere HttpClients innebygde SOCKS-støtte. En rå implementasjon må bevare parsingstilstand på tvers av delvise headere og body-lesinger, og skille vellykket fullføring fra avbrudd, 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 meldingens slutt.

Relaterte artikler