EPIPE în Node.js după conectarea la un proxy SOCKS
Interpretați EPIPE din Node după conectarea la un endpoint SOCKS și verificați dacă handshake-ul necesar s-a încheiat.
Evenimentul connect al socketului Node vă spune că TCP a ajuns la proxy. Nu spune că proxy-ul a deschis o conexiune către destinație.
Un server SOCKS5 așteaptă negocierea metodei, orice autentificare selectată și o cerere de destinație înainte de traficul aplicației. Trimiterea imediată a unei cereri HTTP poate face serverul să închidă conexiunea. O scriere ulterioară poate produce atunci EPIPE.
EPIPE singur nu dovedește un handshake lipsă. Raportează o scriere către o conexiune al cărei partener nu mai acceptă acea comunicare. Citiți evenimentele și răspunsurile de protocol anterioare pentru a afla de ce partenerul a închis.
Folosiți un conector care implementează schimbul SOCKS complet. Pentru clientul HTTPS de bază din Node, un agent care înțelege SOCKS poate efectua acea negociere înainte de TLS-ul destinației. Dacă implementați singur schimbul, acumulați date conform lungimilor câmpurilor protocolului. Nu este garantat că un eveniment data conține un răspuns complet, iar adresa legată returnată nu trebuie să corespundă unui singur șir de octeți codificat fix.
Înregistrați tratarea erorilor înainte ca operațiunea să poată eșua, păstrați etapa conexiunii în raportul de eroare și trimiteți protocolul destinației doar după ce negocierea reușește. Prinderea erorii împiedică un eveniment netratat; nu repară un schimb invalid.