A NetworkStream.DataAvailable == false azt jelenti, hogy nincs azonnal olvasható bájt. Ez nem azt jelenti, hogy egy HTTP-válasz befejeződött. Az ott megálló ciklus teljesen normális SOCKS-letöltést vághat el a csomagok közötti rés alatt.

Miután a SOCKS létrehozta a TCP-kapcsolatot, a befejezési szabályt továbbra is a HTTP keretezése adja:

  • A Content-Length törzs a megadott tartalombájtok után ér véget.
  • A chunked válaszhoz kell a lezáró chunk és a vonatkozó trailerek.
  • A kapcsolat által határolt válasz a kapcsolattal együtt ér véget.
  • Egyes állapotkódoknak és a HEAD-re adott válaszoknak nincs törzsük.

Olvassa el az állapotot és a fejléceket az alkalmazandó szabály meghatározásához. Csak a lezárásra várni nem általános megoldás, mert egy teljes HTTP-válasz nyitva hagyhatja a kapcsolatot. Egy puffer kapacitása ugyanígy független a válasz hosszától.

Használja a HTTP-kliens keretezési megvalósítását, ha az támogatja a választott proxyátvitelt. Egy kompatibilis modern .NET-futtatókörnyezetben érdemes megfontolni a HttpClient natív SOCKS-támogatását. Egy nyers megvalósításnak meg kell őriznie az értelmezési állapotot a részleges fejlécek és törzsolvasások között, és meg kell különböztetnie a sikeres befejeződést a megszakítástól, az időtúllépéstől és a váratlan EOF-tól. Egy nem üres olvasási kérésnél a nulla olvasott bájt azt jelenti, hogy a folyam véget ért; ez más, mint hogy éppen most nincsenek bájtok a sorban.

A proxy láthatóvá teheti az időbeli réseket, de nem alakítja át az üres fogadási sort üzenetvég-jelölővé.

Kapcsolódó cikkek