Llegeix vuit bytes i després cedeix el túnel SOCKS4
Evita empassar-te la salutació de destinació o esperar bytes inexistents analitzant la frontera fixa de la resposta SOCKS4.
La sol·licitud de connexió SOCKS4 s'executa correctament, però l'aplicació mai no veu la salutació inicial del servidor. Un lloc on cal mirar és la primera lectura del connector. Una lectura de setze bytes és massa gran per a una resposta SOCKS4 de vuit bytes.
| Camp de la resposta | Bytes |
|---|---|
| Camp de versió de la resposta | 1 |
| Codi de resultat | 1 |
| Camp de port | 2 |
| Camp d'adreça | 4 |
El codi de resultat 0x5a indica que la sol·licitud ha estat concedida. SOCKS4a canvia com la sol·licitud porta un nom d'amfitrió; no converteix la resposta en setze bytes.
Després de la resposta, el mateix flux TCP porta el protocol de destinació. Un servidor de correu pot enviar la seva salutació immediatament. Per tant, una lectura que consumeixi setze bytes disponibles pot emportar-se la resposta completa del proxy més els primers vuit bytes d'aquesta salutació. Si encara no hi ha res darrere, una lectura bloquejant massa gran pot afegir una espera innecessària.
La longitud exacta és responsabilitat de l'analitzador
Demanar vuit bytes una vegada no és prova suficient que hagin arribat vuit bytes. Les lectures de flux poden tornar menys. Recull exactament la longitud de la resposta dins d'un termini, atura't en un flux tancat o fallit, inspecciona la resposta i deixa els bytes següents per a l'aplicació.
Si el connector fa servir una lectura amb memòria intermèdia més gran, conserva tot el que hi hagi després de la frontera i passa-ho al consumidor següent. Descartar el sobrant és la mateixa pèrdua de dades amb una mida de lectura diferent.
SOCKS5 necessita el seu propi analitzador. L'adreça de la seva resposta pot tenir longituds diferents segons el tipus d'adreça. Substituir cada lectura de proxy per una lectura fixa de vuit bytes arreglaria un protocol alhora que en trencaria un altre.