Tsükkel tahab SOCKS-i vastusest kaheksat baiti. Ta on saanud kolm. Järgmine lugemine tagastab b'' ning tsükkel lisab selle, kontrollib pikkust ja proovib lõputult uuesti.

See on EOF-i käsitlemise viga, mitte aeglane puhverserver, mis vajab pikemat ajapiiri. Tavalise voosoketi vastuvõtu puhul tähendab tühi baidistring, et vastaspool on ühenduse katkestanud. Ülejäänud viis baiti ei jõua selle ühenduse kaudu kohale.

Täppislugemise abifunktsioon vajab kolme erinevat tulemust: mittetühjade tükkide kogumine, EOF-i korral enne nõutavat pikkust ebaõnnestumine ning ajapiiri või muu soketi vea edasisaatmine. Need juhtumid ei tohiks ühte üldisesse korduskatse tsüklisse kokku sulada.

Määra soketi kavatsetud ajapiir enne toimingut ja loe puhverserveri protokolli määratud väljapikkusi. Üks vastuvõtt võib tagastada ainult osa vastusest. Vastupidi, suure fikseeritud puhvri küsimine ei tee iga SOCKS-i aadressi sellise pikkusega.

Ära paranda sõltuvust, kleepides selle lähtekoodi vana MSG_WAITALL-katkendi ja eeldades, et see katab EOF-i, signaalid ja platvormikäitumise. Eelista hooldatava teostuse toetatud parandust või rakenda abifunktsiooni leping teadlikult, kui parser on sinu kood.

Jäta meelde, kui palju baite oodati ja saadi, ilma mandaadiandmeid logimata. „EOF pärast kolme kaheksast vastusebaidist“ selgitab katkist vahetust palju paremini kui „puhverserver jäi jälle kinni“.

Seotud artiklid