NetworkStream.DataAvailable == false znači da nema bajtova spremnih za trenutno čitanje. To ne znači da je HTTP odgovor završen. Petlja koja se tu zaustavi može odsjeći sasvim normalno SOCKS preuzimanje tokom pauze između paketa.

Nakon što SOCKS uspostavi TCP vezu, HTTP uokvirivanje i dalje daje pravilo završetka:

  • Tijelo s Content-Length završava nakon objavljenih bajtova sadržaja.
  • Chunked odgovor zahtijeva završni chunk i primjenjive trailere.
  • Odgovor ograničen vezom završava zajedno s vezom.
  • Neki statusi i odgovori na HEAD nemaju tijelo.

Pročitajte status i zaglavlja da odredite primjenjivo pravilo. Čekanje samo na zatvaranje nije opće rješenje jer potpun HTTP odgovor može ostaviti vezu otvorenom. Kapacitet jednog bafera jednako je nepovezan s dužinom odgovora.

Koristite implementaciju uokvirivanja HTTP klijenta kada podržava odabrani proxy transport. Na kompatibilnom modernom .NET runtimeu razmotrite urođenu SOCKS podršku HttpClient-a. Sirova implementacija mora čuvati stanje parsiranja kroz djelimična zaglavlja i čitanja tijela i razlikovati uspješan završetak od otkazivanja, isteka vremena i neočekivanog EOF-a. Za zahtjev čitanja koji nije prazan, nula pročitanih bajtova znači da je tok završio; to se razlikuje od toga da trenutno nema bajtova u redu.

Proxy može učiniti vremenske pauze uočljivim, ali ne pretvara prazan red za primanje u marker kraja poruke.

Povezani članci