NetworkStream.DataAvailable == false hemen okunmaya hazır bayt olmadığı anlamına gelir. Bir HTTP yanıtının tamamlandığı anlamına gelmez. Orada duran bir döngü, paketler arasındaki boşlukta tamamen normal bir SOCKS indirmesini kesebilir.

SOCKS TCP bağlantısını kurduktan sonra tamamlanma kuralını yine HTTP çerçevelemesi verir:

  • Content-Length gövdesi, bildirilen içerik baytlarından sonra biter.
  • Chunked bir yanıt, bitiş chunk'ını ve geçerli trailer'ları gerektirir.
  • Bağlantıyla sınırlanan yanıt, bağlantıyla birlikte biter.
  • Bazı durum kodlarının ve HEAD yanıtlarının gövdesi yoktur.

Geçerli kuralı belirlemek için durumu ve başlıkları okuyun. Yalnızca kapanmayı beklemek genel bir çözüm değildir, çünkü tam bir HTTP yanıtı bağlantıyı açık bırakabilir. Bir tamponun kapasitesi de yanıt uzunluğuyla aynı şekilde ilgisizdir.

HTTP istemcisinin çerçeveleme uygulamasını, seçilen proxy taşımasını desteklediğinde kullanın. Uyumlu modern bir .NET çalışma zamanında HttpClient'ın yerleşik SOCKS desteğini değerlendirin. Ham bir uygulama, kısmi başlıklar ve gövde okumaları arasında ayrıştırma durumunu korumalı ve başarılı tamamlanmayı iptal, zaman aşımı ve beklenmeyen EOF'tan ayırmalıdır. Boş olmayan bir okuma isteğinde sıfır bayt okunması akışın bittiği anlamına gelir; bu, şu anda kuyrukta bayt olmamasından farklıdır.

Proxy zamanlama boşluklarını belirginleştirebilir, ancak boş bir alma kuyruğunu ileti sonu işaretine dönüştürmez.

İlgili makaleler