NetworkStream.DataAvailable == false tarkoittaa, ettei yhtään tavua ole heti luettavissa. Se ei tarkoita, että HTTP-vastaus on valmis. Siihen pysähtyvä silmukka voi katkaista täysin normaalin SOCKS-latauksen pakettien välisen tauon aikana.

Kun SOCKS on muodostanut TCP-yhteyden, HTTP-kehystys antaa edelleen valmistumissäännön:

  • Content-Length-runko päättyy ilmoitettujen sisältötavujen jälkeen.
  • Chunked-vastaus tarvitsee päättävän chunkin ja soveltuvat trailerit.
  • Yhteyteen rajattu vastaus päättyy yhteyden mukana.
  • Joillakin tilakoodeilla ja HEAD-vastauksilla ei ole runkoa.

Lue tila ja otsakkeet ja määritä soveltuva sääntö. Pelkän sulkeutumisen odottaminen ei ole yleisratkaisu, koska valmis HTTP-vastaus voi jättää yhteyden auki. Yhden puskurin kapasiteetti ei liity vastauksen pituuteen.

Käytä HTTP-asiakasohjelman kehystysratkaisua, kun se tukee valittua välityspalvelinliikennettä. Yhteensopivassa nykyaikaisessa .NET-ajoympäristössä harkitse HttpClientin natiivia SOCKS-tukea. Raaka toteutus ei saa menettää jäsennystilaa osittaisten otsakkeiden ja runkojen lukujen välillä, ja sen on erotettava onnistunut valmistuminen peruutuksesta, aikakatkaisusta ja odottamattomasta EOF:stä. Ei-tyhjässä lukupyynnössä nolla luettua tavua tarkoittaa, että virta on päättynyt; tämä eroaa siitä, ettei jonossa ole juuri nyt tavuja.

Välityspalvelin voi tehdä ajoituskatkoksista näkyviä, mutta se ei muuta tyhjää vastaanottojonoa viestin lopun merkiksi.

Aiheeseen liittyvät artikkelit