EPIPE v Node.js po pripojení k SOCKS proxy
Vysvetlite chybu EPIPE v Node po pripojení ku koncovému bodu SOCKS a overte, či sa dokončil požadovaný handshake.
Udalosť connect socketu v Node hovorí, že TCP dosiahlo proxy. Nehovorí, že proxy otvorilo spojenie k cieľu.
Server SOCKS5 očakáva pred prevádzkou aplikácie vyjednanie metódy, prípadnú zvolenú autentifikáciu a požiadavku na cieľ. Ak odošlete požiadavku HTTP okamžite, server môže spojenie zavrieť. Neskorší zápis potom môže vyvolať EPIPE.
Samotné EPIPE nedokazuje chýbajúci handshake. Oznamuje zápis do spojenia, ktorého protistrana už túto komunikáciu neprijíma. Prečítajte si skoršie udalosti a odpovede protokolu, aby ste zistili, prečo protistrana spojenie zavrela.
Použite konektor, ktorý implementuje úplnú výmenu SOCKS. Pre základného klienta HTTPS v Node môže agent rozumejúci SOCKS vykonať toto vyjednanie pred TLS cieľa. Ak výmenu implementujete sami, zhromažďujte dáta podľa dĺžok polí protokolu. Nie je zaručené, že jedna udalosť data obsahuje jednu úplnú odpoveď, a vrátená viazaná adresa nemusí zodpovedať jednému pevne zapísanému bajtovému reťazcu.
Zaregistrujte ošetrenie chýb skôr, než operácia môže zlyhať, zachovajte fázu spojenia v správe o chybe a protokol cieľa odošlite až po úspešnom vyjednaní. Zachytenie chyby zabráni neošetrenej udalosti; neopraví však neplatnú výmenu.