EPIPE dans Node.js après la connexion à un proxy SOCKS
Interprétez l'EPIPE de Node après une connexion à un point de terminaison SOCKS et vérifiez si la poignée de main requise est terminée.
L'événement connect de la socket Node vous indique que TCP a atteint le proxy. Il n'indique pas que le proxy a ouvert une connexion vers la destination.
Un serveur SOCKS5 attend une négociation de méthode, une éventuelle authentification choisie et une requête de destination avant le trafic applicatif. Envoyer immédiatement une requête HTTP peut amener le serveur à fermer la connexion. Une écriture ultérieure peut alors produire EPIPE.
EPIPE seul ne prouve pas une poignée de main manquante. Il signale une écriture vers une connexion dont le pair n'accepte plus cette communication. Lisez les événements et réponses protocolaires antérieurs pour comprendre pourquoi le pair a fermé.
Utilisez un connecteur qui implémente l'échange SOCKS complet. Pour le client HTTPS de base de Node, un agent compatible SOCKS peut effectuer cette négociation avant le TLS de la destination. Si vous implémentez l'échange vous-même, accumulez les données selon les longueurs de champs du protocole. Un événement data ne contient pas forcément une réponse complète, et l'adresse liée renvoyée n'a pas à correspondre à une chaîne d'octets codée en dur.
Enregistrez la gestion des erreurs avant que l'opération puisse échouer, conservez l'étape de connexion dans le rapport d'erreur et n'envoyez le protocole de destination qu'après la réussite de la négociation. Intercepter l'erreur évite un événement non géré ; cela ne répare pas un échange invalide.