Python SOCKS окуу циклинде EOF иштетүү
Жабык байланышты эч качан келбеген убакыт чеги деп эсептөөнүн ордуна SOCKS так окуу цилинде EOFти ачык иштетиңиз.
Цикл SOCKS жообунун сегиз байтын каалайт. Ал үчөөнү алды. Кийинки окуу b'' кайтарат, цикл аны кошот, узундугун текшерет жана түбөлүк кайра аракет кылат.
Бул EOFти иштетүү катасы, узак убакыт чегин талап кылган жай прокси эмес. Кадимки агымдык сокет кабыл алуусунда бош байт сабы каршы тарап ажыраганын билдирет. Калган беш байт ошол байланыш аркылуу келбейт.
Так окуу жардамчысына үч өзүнчө натыйжа керек: бош эмес бөлүктөрдү чогултуу, талап кылынган узундукка жетпей EOFте ийгиликсиз болуу жана убакыт чегин же башка сокет катасын өткөрүү. Бул учурлар бир жалпы кайталоо циклине бириктирилбеши керек.
Операциядан мурун сокеттин болжолдонгон убакыт чегин коюңуз жана прокси протоколу белгилеген талаа узундуктарын окуңуз. Бир кабыл алуу жооптун бир бөлүгүн гана кайтара алат. Тескерисинче, чоң туруктуу буфер суроо ар бир SOCKS дарегин ошол узундукка айландырбайт.
Көз карандылыкты анын булагына эски MSG_WAITALL үзүндүсүн кыстырып, ал EOFти, сигналдарды жана платформанын жүрүм-турумун камтыйт деп болжолдоо менен оңдобоңуз. Колдоого алынган ишке ашыруунун колдоосу бар оңдоосун тандаңыз, же талдоочу сиздин код болсо, жардамчынын келишимин атайын ишке ашырыңыз.
Канча байт күтүлгөнүн жана кабыл алынганын сактаңыз, эсептик маалыматтардын жүктөрүн журналга жазбастан. «Сегиз жооп байтынын үчөөнөн кийин EOF» бузулган алмашууну «прокси кайра илинип калды» дегенден алда канча жакшы түшүндүрөт.