Un bucle vol vuit bytes d'una resposta SOCKS. N'ha rebut tres. La lectura següent retorna b'', i el bucle l'afegeix, comprova la longitud i torna a intentar-ho per sempre.

Això és un error de gestió de l'EOF, no un proxy lent que necessita un temps d'espera més llarg. En una recepció normal per un sòcol de flux, una cadena de bytes buida significa que l'altra part s'ha desconnectat. Els cinc bytes restants no arribaran per aquesta connexió.

Un auxiliar de lectura exacta necessita tres resultats diferents: acumular fragments no buits, fallar en l'EOF abans de la longitud requerida i propagar un temps d'espera o un altre error del sòcol. Aquests casos no s'han de col·lapsar en un únic bucle de reintents genèric.

Estableix el temps d'espera previst del sòcol abans de l'operació i llegeix les longituds de camp que especifica el protocol del proxy. Una sola recepció pot retornar només una part d'una resposta. A l'inrevés, demanar un búfer fix gran no fa que totes les adreces SOCKS tinguin aquesta longitud.

No repares una dependència enganxant un fragment antic de MSG_WAITALL al seu codi font i assumint que cobreix l'EOF, els senyals i el comportament de la plataforma. Prefereix la correcció admesa de la implementació mantinguda, o implementa deliberadament el contracte de l'auxiliar quan l'analitzador sigui el teu codi.

Conserva quants bytes s'esperaven i s'han rebut, sense registrar càrregues de credencials. «EOF després de tres de vuit bytes de resposta» explica l'intercanvi trencat molt millor que «el proxy s'ha tornat a penjar».

Articles relacionats