EOF an enger Python SOCKS-Liesluus behandelen
Behandel EOF explizit an enger SOCKS-Liesluus mat geneelem Liesen, amplaz eng zouenen Verbindung als Timeout ze behandelen, dee ni kënnt.
Eng Luus wëll aacht Byte vun enger SOCKS-Äntwert. Si huet dräi krut. Déi nächst Liesung gëtt b'' zréck, an d'Luus setzt en derbäi, kontrolléiert d'Längt a probéiert ëmmer erëm.
Dat ass e Feeler bei der EOF-Behandlung, keen luesen Proxy, deen en méi laangen Timeout brauch. Bei enger normaler Empfanksstream-Socket heescht en eidele Byte-String, datt de Géigeniwwer d'Verbindung getrennt huet. Déi fënnef reschtlech Byte kommen net iwwer déi Verbindung.
En Hëllefsprogramm fir geneelem Liesen brauch dräi ënnerschiddlech Resultater: net-eidel Deeler sammelen, bei EOF virun der erfuerderlecher Längt feelen, an en Timeout oder en anere Socket-Feeler weiderginn. Dës Fäll sollten net an enger eenzeger allgemenger Neiversich-Luus zesummefalen.
Setz den intendéierten Timeout vun der Socket virun der Operatioun, a lies d'Feldlängten, déi de Proxy-Protokoll virgëtt. En eenzegen Empfang kann nëmmen en Deel vun enger Äntwert zréckginn. Ëmgekéiert mécht d'Fro no engem grousse fixe Puffer net, datt all SOCKS-Adress déi Längt huet.
Reparéier keng Ofhängegkeet andeems du en ale MSG_WAITALL-Snippet a säi Quelltext pechs an unhëls, datt en EOF, Signaler a Plattformverhalen ofdeckt. Bevirdeel dee ënnerstëtzten Fix vun der ënnerhalener Implementatioun, oder implementéier de Kontrakt vum Hëllefsprogramm bewosst, wann den Parser däin Code ass.
Behal wéi vill Byte erwaart an empfaang goufen, ouni Umellungsdaten ze loggen. „EOF no dräi vun aacht Äntwertsbyte“ erkläert den futti Austausch vill besser wéi „de Proxy hänkt nees“.