Node.js EPIPE efter forbindelse til en SOCKS-proxy
Fortolk Nodes EPIPE efter forbindelse til et SOCKS-endepunkt, og kontroller, om det krævede handshake blev fuldført.
Node-socketens connect-hændelse fortæller dig, at TCP nåede proxyen. Den siger ikke, at proxyen har åbnet en forbindelse til destinationen.
En SOCKS5-server forventer metodeforhandling, eventuel valgt godkendelse og en destinationsanmodning før applikationstrafik. Hvis du sender en HTTP-anmodning med det samme, kan serveren lukke forbindelsen. En senere skrivning kan derefter give EPIPE.
EPIPE alene beviser ikke et manglende handshake. Den rapporterer en skrivning til en forbindelse, hvis modpart ikke længere accepterer den kommunikation. Læs de tidligere hændelser og protokolsvar for at finde ud af, hvorfor modparten lukkede.
Brug en connector, der implementerer den fuldstændige SOCKS-udveksling. For Nodes kerne-HTTPS-klient kan en SOCKS-bevidst agent udføre den forhandling før destinationens TLS. Hvis du selv implementerer udvekslingen, skal du akkumulere data efter protokollens feltlængder. Det er ikke garanteret, at én data-hændelse indeholder ét fuldstændigt svar, og den returnerede bundne adresse behøver ikke at matche én hårdkodet byte-streng.
Registrer fejlhåndtering, før operationen kan fejle, bevar forbindelsesstadiet i fejlrapporten, og send destinationsprotokollen først, når forhandlingen er lykkedes. At fange fejlen forhindrer en uhåndteret hændelse; den reparerer ikke en ugyldig udveksling.