EPIPE u Node.js-u nakon povezivanja sa SOCKS proxyjem
Objasnite Node EPIPE grešku nakon povezivanja sa SOCKS odredištem i proverite da li je obavezni handshake završen.
connect događaj Node socket-a govori da je TCP stigao do proxyja. Ne govori da je proxy otvorio vezu prema odredištu.
SOCKS5 server očekuje pregovor metode, eventualnu izabranu autentifikaciju i zahtev za odredištem pre saobraćaja aplikacije. Ako odmah pošaljete HTTP zahtev, server može zatvoriti vezu. Kasnije pisanje tada može proizvesti EPIPE.
EPIPE sam po sebi ne dokazuje da handshake nedostaje. On prijavljuje pisanje u vezu čija druga strana više ne prihvata tu komunikaciju. Pročitajte ranije događaje i odgovore protokola da biste utvrdili zašto je druga strana zatvorila vezu.
Koristite konektor koji implementira kompletnu SOCKS razmenu. Za Nodeov osnovni HTTPS klijent, agent koji razume SOCKS može obaviti taj pregovor pre TLS-a odredišta. Ako sami implementirate razmenu, akumulirajte podatke prema dužinama polja protokola. Nije zagarantovano da jedan data događaj sadrži jedan potpuni odgovor, a vraćena vezana adresa ne mora odgovarati jednom tvrdo kodiranom nizu bajtova.
Registrujte rukovanje greškama pre nego što operacija može pasti, zadržite fazu veze u izveštaju o grešci i pošaljite protokol odredišta tek nakon uspešnog pregovora. Hvatanje greške sprečava neobrađeni događaj; ono ne popravlja neispravnu razmenu.