Ang NetworkStream.DataAvailable == false ay nangangahulugang walang byte na handa para basahin agad. Hindi ito nangangahulugang kumpleto na ang isang HTTP response. Ang loop na humihinto doon ay maaaring pumutol ng ganap na normal na SOCKS download habang may agwat sa pagitan ng mga packet.

Matapos maitatag ng SOCKS ang TCP connection, ang HTTP framing pa rin ang nagbibigay ng tuntunin ng pagkumpleto:

  • Ang body na may Content-Length ay nagtatapos pagkatapos ng mga idineklarang content byte.
  • Ang chunked response ay nangangailangan ng huling chunk at angkop na trailers.
  • Ang response na hinahanggan ng koneksyon ay nagtatapos kasama ng koneksyon.
  • Ang ilang status at tugon sa HEAD ay walang body.

Basahin ang status at mga header upang matukoy ang naaangkop na tuntunin. Ang paghihintay lamang sa pagsasara ay hindi pangkalahatang solusyon, dahil ang kumpletong HTTP response ay maaaring mag-iwan ng koneksyon na bukas. Ang kapasidad ng isang buffer ay gayundin walang kaugnayan sa haba ng tugon.

Gamitin ang implementasyon ng framing ng HTTP client kapag sinusuportahan nito ang napiling proxy transport. Sa isang compatible na modernong .NET runtime, isaalang-alang ang native SOCKS support ng HttpClient. Ang raw na implementasyon ay dapat panatilihin ang parsing state sa mga partial header at pagbasa ng body, at makilala ang matagumpay na pagkumpleto mula sa pagkansela, timeout at hindi inaasahang EOF. Sa isang read request na hindi walang laman, ang zero byte na nabasa ay nangangahulugang natapos na ang stream; iba ito sa walang byte sa pila sa sandaling ito.

Maaaring gawing kapansin-pansin ng proxy ang mga agwat ng oras, ngunit hindi nito ginagawang marker ng katapusan ng mensahe ang isang walang laman na receive queue.

Kaugnay na mga artikulo