NetworkStream.DataAvailable == false মানে তাৎক্ষণিক পড়ার জন্য কোনো বাইট প্রস্তুত নেই। এর অর্থ এনন নয় যে একটি HTTP প্রতিক্রিয়া সম্পূর্ণ হয়েছে। সেখানেই থেমে যাওয়া একটি লুপ প্যাকেটের মধ্যবর্তী বিরতিতে সম্পূর্ণ স্বাভাবিক SOCKS ডাউনলোড কেটে ফেলতে পারে।

SOCKS TCP সংযোগ স্থাপনের পরও HTTP ফ্রেমিংই সমাপত্তির নিয়ম দেয়:

  • Content-Length যুক্ত বডি তার ঘোষিত কনটেন্ট বাইটের পরে শেষ হয়।
  • chunked প্রতিক্রিয়ার জন্য তার সমাপত্তি chunk এবং প্রযোজ্য trailer প্রয়োজন।
  • সংযোগ-নির্ধারিত প্রতিক্রিয়া সংযোগের সাঙ্গে শেষ হয়।
  • কিছু status এবং HEAD-এর প্রতিক্রিয়ায় বডি থাকে না।

প্রযোজ্য নিয়ম নির্ধারণের জন্য status এবং header পড়ুন। কেবল বন্ধ হওয়ার অপেক্ষা করা সাধারণ সমাধান নয়, কারণ একটি সম্পূর্ণ HTTP প্রতিক্রিয়া সংযোগটি খোলা রেখে দিতে পারে। একটি buffer-এর ধারণক্ষমতাও প্রতিক্রিয়ার দৈর্ঘ্যের সাথে সমানভাবে অসম্পর্কিত।

HTTP ক্লায়েন্টের ফ্রেমিং বাস্তবায়ন ব্যবহার করুন যখন তা নির্বাচিত proxy পরিবহন সমর্থন করে। সামঞ্জস্যপূর্ণ আধুনিক .NET রানটাইমে HttpClient-এর নিজস্ব SOCKS সমর্থন বিবেচনা করুন। একটি কাঁচা বাস্তবায়নকে আংশিক header এবং বডি পড়ার মধ্যে পার্সিং অবস্থা রক্ষা করতে হবে এবং সফল সমাপত্তিকে বাতিল, টাইমআউট এবং অপ্রত্যাশিত EOF থেকে আলাদা করতে হবে। অশূন্য পড়ার অনুরোধে শূন্য বাইট পড়া মানে stream শেষ হয়েছে; এটি এই মুহূর্তে কোনো বাইট সারিতে না থাকার থেকে আলাদা।

proxy সময়ের ব্যবধান স্পষ্ট করতে পারে, কিন্তু এটি একটি খালি গ্রহণ সারিকে বার্তার সমাপত্তি চিহ্নে পরিণত করে না।

সম্পর্কিত নিবন্ধ