O evento connect do socket do Node indica que o TCP chegou ao proxy. Não indica que o proxy abriu uma ligação ao destino.

Um servidor SOCKS5 espera negociação de método, qualquer autenticação selecionada e um pedido de destino antes do tráfego da aplicação. Enviar um pedido HTTP de imediato pode fazer o servidor fechar a ligação. Uma escrita posterior pode então produzir EPIPE.

EPIPE por si só não prova um handshake em falta. Reporta uma escrita numa ligação cujo par já não aceita essa comunicação. Leia os eventos e respostas de protocolo anteriores para descobrir porque o par fechou.

Utilize um conector que implemente a troca SOCKS completa. Para o cliente HTTPS principal do Node, um agente com suporte SOCKS pode realizar essa negociação antes do TLS do destino. Se implementar a troca você mesmo, acumule dados de acordo com os comprimentos dos campos do protocolo. Não é garantido que um evento data contenha uma resposta completa, e o endereço vinculado devolvido não tem de coincidir com uma cadeia de bytes codificada de forma fixa.

Registe o tratamento de erros antes de a operação poder falhar, mantenha a fase da ligação no relatório de erro e envie o protocolo de destino apenas após a negociação ter sucesso. Apanhar o erro evita um evento não tratado; não repara uma troca inválida.

Artigos relacionados