NetworkStream.DataAvailable == false значи дека нема бајти подготвени за непосредно читање. Тоа не значи дека HTTP одговорот е завршен. Јамка што застанува таму може да скрати сосема нормално SOCKS преземање за време на пауза меѓу пакети.

Откако SOCKS ќе воспостави TCP врска, вградувањето на HTTP сепак го дава правилото за завршување:

  • Телото со Content-Length завршува по објавените бајти на содржината.
  • Chunked одговорот бара завршен chunk и соодветни trailers.
  • Одговорот ограничен со врската завршува со врската.
  • Некои статуси и одговори на HEAD немаат тело.

Прочитајте статус и заглавија за да го одредите применливото правило. Чекањето само на затворање не е општо решение, бидејќи целосен HTTP одговор може да ја остави врската отворена. Капацитетот на еден бафер исто така не е поврзан со должината на одговорот.

Користете ја имплементацијата на вградување на HTTP клиентот кога го поддржува избраниот прокси транспорт. На компатибилно модерно .NET извршно опкружување разгледајте вградената SOCKS поддршка на HttpClient. Суровата имплементација мора да ја задржи состојбата на парсирање низ делумни заглавија и читања на телото и да разликува успешно завршување од откажување, истек на време и неочекуван EOF. За непразно барање за читање, нула прочитани бајти значи дека текот завршил; ова е различно од тоа што во моментов нема бајти во редот.

Проксито може да ги направи временските паузи забележливи, но не го претвора празниот ред за прием во ознака за крај на порака.

Поврзани статии