Node.js EPIPE na verbinding met een SOCKS-proxy
Interpreteer EPIPE in Node na verbinding met een SOCKS-eindpunt en controleer of de vereiste handshake is voltooid.
De connect-gebeurtenis van de Node-socket vertelt je dat TCP de proxy heeft bereikt. Het zegt niet dat de proxy een verbinding naar de bestemming heeft geopend.
Een SOCKS5-server verwacht methodeonderhandeling, eventuele gekozen authenticatie en een bestemmingsverzoek vóór het applicatieverkeer. Als je meteen een HTTP-verzoek verstuurt, kan de server de verbinding sluiten. Een latere schrijfactie kan dan EPIPE opleveren.
EPIPE alleen bewijst geen ontbrekende handshake. Het meldt een schrijfactie naar een verbinding waarvan de tegenpartij die communicatie niet meer accepteert. Lees de eerdere gebeurtenissen en protocolantwoorden om te achterhalen waarom de tegenpartij sloot.
Gebruik een connector die de volledige SOCKS-uitwisseling implementeert. Voor de kern-HTTPS-client van Node kan een SOCKS-bewuste agent die onderhandeling vóór de TLS van de bestemming uitvoeren. Als je de uitwisseling zelf implementeert, verzamel dan gegevens volgens de veldlengtes van het protocol. Eén data-gebeurtenis bevat niet gegarandeerd één volledig antwoord, en het teruggegeven gebonden adres hoeft niet overeen te komen met één hardgecodeerde byte-reeks.
Registreer foutafhandeling voordat de bewerking kan mislukken, behoud de verbindingsfase in het foutrapport en stuur het bestemmingsprotocol pas nadat de onderhandeling is geslaagd. Het opvangen van de fout voorkomt een onafgehandelde gebeurtenis; het herstelt geen ongeldige uitwisseling.