Håndter EOF i en Python SOCKS-leseløkke
Håndter EOF eksplisitt i en SOCKS-leseløkke for nøyaktig lesing i stedet for å behandle en lukket forbindelse som en tidsavbrudd som aldri kommer.
En løkke vil ha åtte byte av et SOCKS-svar. Den har mottatt tre. Neste lesing returnerer b'', og løkka legger det til, kontrollerer lengden og prøver igjen i det uendelige.
Det er en EOF-håndteringsfeil, ikke en treg proxy som trenger en lengre tidsavbrudd. Ved vanlig mottak over en strøm-socket betyr en tom bytestreng at motparten har koblet fra. De resterende fem bytene kommer ikke på den forbindelsen.
En hjelpefunksjon for nøyaktig lesing trenger tre forskjellige utfall: akkumulere ikke-tomme biter, feile på EOF før den påkrevde lengden og videresende en tidsavbrudd eller en annen socket-feil. Disse tilfellene bør ikke smelte sammen i én generisk gjenforsøksløkke.
Angi socketens tiltenkte tidsavbrudd før operasjonen, og les feltlengdene som proxy-protokollen spesifiserer. Én enkelt mottak kan bare returnere en del av et svar. Omvendt gjør en forespørsel om en stor fast buffer ikke at hver SOCKS-adresse har den lengden.
Ikke reparer en avhengighet ved å lime et gammelt MSG_WAITALL-utdrag inn i kildekoden og anta at det dekker EOF, signaler og plattformatferd. Foretrekk den vedlikeholdte implementeringens støttede rettelse, eller implementer hjelperens kontrakt bevisst når parseren er din kode.
Behold hvor mange byte som var forventet og mottatt, uten å logge påloggingsnyttelaster. «EOF etter tre av åtte svarbyte» forklarer den ødelagte utvekslingen mye bedre enn «proxyen henger igjen».