EPIPE in Node.js dopo la connessione a un proxy SOCKS
Interpretare l'EPIPE di Node dopo la connessione a un endpoint SOCKS e verificare se l'handshake richiesto è stato completato.
L'evento connect del socket Node indica che TCP ha raggiunto il proxy. Non indica che il proxy abbia aperto una connessione verso la destinazione.
Un server SOCKS5 attende una negoziazione del metodo, un'eventuale autenticazione selezionata e una richiesta di destinazione prima del traffico dell'applicazione. Inviare subito una richiesta HTTP può far chiudere la connessione al server. Una scrittura successiva può quindi produrre EPIPE.
EPIPE da solo non dimostra un handshake mancante. Segnala una scrittura su una connessione il cui peer non accetta più quella comunicazione. Leggere gli eventi e le risposte di protocollo precedenti per capire perché il peer ha chiuso.
Usare un connettore che implementa lo scambio SOCKS completo. Per il client HTTPS principale di Node, un agent compatibile con SOCKS può eseguire quella negoziazione prima del TLS della destinazione. Se si implementa lo scambio da soli, accumulare i dati in base alle lunghezze dei campi del protocollo. Non è garantito che un evento data contenga una risposta completa, e l'indirizzo associato restituito non deve necessariamente corrispondere a una stringa di byte codificata in modo fisso.
Registrare la gestione degli errori prima che l'operazione possa fallire, conservare la fase di connessione nel report dell'errore e inviare il protocollo di destinazione solo dopo il successo della negoziazione. Catturare l'errore evita un evento non gestito; non ripara uno scambio non valido.