NetworkStream.DataAvailable == false tyder at det ikkje er bytes klare til å lesast med ein gong. Det tyder ikkje at eit HTTP-svar er fullstendig. Ei løkke som stoppar der, kan korta av ei heilt normal SOCKS-nedlasting under eit gap mellom pakkar.

Etter at SOCKS har oppretta TCP-tilkoplinga, gjev HTTP-rammeverket framleis fullføringsregelen:

  • Ein body med Content-Length sluttar etter dei oppgjevne innhaldsbyta.
  • Eit chunked-svar treng den avsluttande chunk-en og relevante trailers.
  • Eit tilkopling-avgrensa svar sluttar med tilkoplinga.
  • Nokre statusar og svar på HEAD har ingen body.

Les status og headers for å fastslå den gjeldande regelen. Å vente berre på lukking er ikkje ei generell løysing, fordi eit fullstendig HTTP-svar kan la tilkoplinga stå open. Kapasiteten til ein buffer er like lite relevant for lengda på svaret.

Bruk rammeimplementasjonen til HTTP-klienten når han støttar den valde proxytransporten. På ein kompatibel moderne .NET-runtime kan du vurdere den innebygde SOCKS-støtta til HttpClient. Ein rå implementasjon må halde på parsestatusen over delvise headers og body-lesingar, og skilje vellukka fullføring frå avbrot, tidsavbrot og uventa EOF. For ein ikkje-tom leseførespurnad tyder null lesne bytes at straumen er slutt; dette er annleis enn at det akkurat no ikkje ligg bytes i køen.

Proxyen kan gjere tidsgap tydelege, men han gjer ikkje ein tom mottakskø om til ein markør for slutten på meldinga.

Relaterte artiklar