Zanka želi osem bajtov odgovora SOCKS. Prejela je tri. Naslednje branje vrne b'', zanka ga doda, preveri dolžino in poskusi znova v nedogled.

To je napaka pri obdelavi EOF, ne počasen proxy, ki potrebuje daljšo časovno omejitev. Pri običajnem sprejemu prek tokovnega vtiča prazen niz bajtov pomeni, da se je druga stran odklopila. Preostalih pet bajtov ne bo prispelo po tej povezavi.

Pomočnik za natančno branje potrebuje tri različne izide: kopičenje nepraznih delov, neuspeh pri EOF pred zahtevano dolžino in posredovanje časovne omejitve ali druge napake vtiča. Ti primeri se ne smejo zliti v eno splošno zanko ponovnih poskusov.

Pred operacijo nastavite predvideno časovno omejitev vtiča in berite dolžine polj, ki jih določa protokol proxyja. En sam sprejem lahko vrne le del odgovora. Nasprotno, zahteva po velikem fiksnem medpomnilniku ne naredi vsakega naslova SOCKS te dolžine.

Ne popravljajte odvisnosti z lepljenjem starega izseka MSG_WAITALL v njeno izvorno kodo in predpostavko, da pokriva EOF, signale in vedenje platforme. Raje uporabite podprto popravek v vzdrževani izvedbi ali pa, ko je razčlenjevalnik vaša koda, namenoma izvedite pogodbo pomočnika.

Zabeležite, koliko bajtov je bilo pričakovanih in prejetih, brez beleženja koristnih podatkov poverilnic. „EOF po treh od osmih bajtov odgovora“ veliko bolje pojasni pokvarjeno izmenjavo kot „proxy se je spet zataknil“.

Sorodni članki