SOCKS 프록시에 연결한 뒤 Node.js EPIPE
SOCKS 엔드포인트에 연결한 뒤 Node의 EPIPE를 해석하고 필요한 핸드셰이크가 완료되었는지 확인합니다.
Node 소켓의 connect 이벤트는 TCP가 프록시에 도달했음을 알려 줍니다. 프록시가 목적지로 연결을 열었다는 뜻은 아닙니다.
SOCKS5 서버는 애플리케이션 트래픽 전에 메서드 협상, 선택된 인증, 그리고 목적지 요청을 기대합니다. HTTP 요청을 곧바로 보내면 서버가 연결을 닫을 수 있습니다. 그 뒤의 쓰기가 EPIPE를 일으킬 수 있습니다.
EPIPE만으로 핸드셰이크가 빠졌다고 증명할 수는 없습니다. 상대가 더 이상 그 통신을 받아들이지 않는 연결에 쓴 것을 보고하는 오류입니다. 상대가 왜 닫았는지 알려면 이전 이벤트와 프로토콜 응답을 읽어야 합니다.
SOCKS 교환 전체를 구현한 커넥터를 사용하십시오. Node의 핵심 HTTPS 클라이언트라면 SOCKS를 이해하는 에이전트가 목적지 TLS 전에 그 협상을 수행할 수 있습니다. 교환을 직접 구현한다면 프로토콜의 필드 길이에 따라 데이터를 누적하십시오. data 이벤트 하나에 완전한 응답 하나가 들어 있다고 보장되지 않으며, 반환된 바인드 주소가 하드코딩된 하나의 바이트 문자열과 일치할 필요도 없습니다.
작업이 실패할 수 있기 전에 오류 처리를 등록하고, 오류 보고서에 연결 단계를 남기고, 협상이 성공한 뒤에만 목적지 프로토콜을 보내십시오. 오류를 잡으면 처리되지 않은 이벤트는 막을 수 있지만, 잘못된 교환을 고치지는 못합니다.