Цикл SOCKS жауабының сегіз байтын қалайды. Ол үшеуін алды. Келесі оқу b'' қайтарады, цикл оны қосады, ұзындығын тексереді және мәңгі қайталап көреді.

Бұл EOF-ті өңдеу қатесі, ұзағырақ уақыт шегін қажет ететін баяу прокси емес. Қалыпты ағынды сокет қабылдауында бос байт жолы қарсы тараптың ажырағанын білдіреді. Қалған бес байт сол қосылым арқылы келмейді.

Дәл оқу көмекшісіне үш бөлек нәтиже қажет: бос емес бөліктерді жинау, қажетті ұзындыққа жетпей EOF-те сәтсіздікке ұшырау және уақыт шегін немесе басқа сокет қатесін жеткізу. Бұл жағдайлар бір жалпы қайталау цикліне бірікпеуі керек.

Операция алдында сокеттің болжамды уақыт шегін орнатыңыз және прокси хаттамасы белгілеген өріс ұзындықтарын оқыңыз. Бір қабылдау жауаптың тек бір бөлігін қайтаруы мүмкін. Керісінше, үлкен тұрақты буфер сұрау әр SOCKS мекенжайын сол ұзындыққа айналдырмайды.

Тәуелділікті оның бастауыш кодына ескі MSG_WAITALL үзіндісін қойып, ол EOF-ті, сигналдарды және платформа мінез-құлқын қамтиды деп болжау арқылы жөндемеңіз. Қолдау көрсетілетін іске асырудың қолдауы бар түзетуін таңдаңыз немесе талдаушы сіздің кодыңыз болса, көмекшінің шартын әдейі іске асырыңыз.

Қанша байт күтілгенін және қабылданғанын сақтаңыз, тіркелгі деректерінің жүктемелерін журналға жазбай. «Сегіз жауап байтының үшеуінен кейін EOF» бұзылған алмасуды «прокси қайтадан қатып қалды» дегеннен әлдеқайда жақсы түсіндіреді.

Қатысты мақалалар