EPIPE de Node.js després de connectar-se a un proxy SOCKS
Interpreteu l'EPIPE de Node després de connectar-se a un punt SOCKS i comproveu si l'handshake necessari s'ha completat.
L'esdeveniment connect del sòcol de Node us diu que TCP ha arribat al proxy. No diu que el proxy hagi obert una connexió a la destinació.
Un servidor SOCKS5 espera una negociació de mètode, qualsevol autenticació seleccionada i una sol·licitud de destinació abans del trànsit de l'aplicació. Enviar una sol·licitud HTTP immediatament pot fer que el servidor tanqui la connexió. Una escriptura posterior pot produir EPIPE.
EPIPE per si sol no demostra que falti l'handshake. Informa d'una escriptura en una connexió el peer de la qual ja no accepta aquesta comunicació. Llegiu els esdeveniments i les respostes de protocol anteriors per esbrinar per què el peer ha tancat.
Utilitzeu un connector que implementi l'intercanvi SOCKS complet. Per al client HTTPS principal de Node, un agent compatible amb SOCKS pot fer aquesta negociació abans del TLS de la destinació. Si implementeu l'intercanvi vosaltres mateixos, acumuleu dades segons les longituds de camp del protocol. No es garanteix que un esdeveniment data contingui una resposta completa, i l'adreça vinculada retornada no cal que coincideixi amb una cadena de bytes codificada de manera fixa.
Registreu la gestió d'errors abans que l'operació pugui fallar, conserveu l'etapa de la connexió a l'informe d'error i envieu el protocol de destinació només després que la negociació tingui èxit. Capturar l'error evita un esdeveniment no gestionat; no repara un intercanvi no vàlid.