Событие connect сокета Node сообщает, что TCP дошёл до прокси. Оно не говорит о том, что прокси открыл соединение с пунктом назначения.

Сервер SOCKS5 ожидает согласование метода, выбранную аутентификацию и запрос пункта назначения до прикладного трафика. Если сразу отправить HTTP-запрос, сервер может закрыть соединение. Последующая запись тогда может вызвать EPIPE.

Один EPIPE не доказывает отсутствие рукопожатия. Он сообщает о записи в соединение, вторая сторона которого больше не принимает такую передачу. Прочитайте предыдущие события и ответы протокола, чтобы понять, почему сторона закрыла соединение.

Используйте коннектор, реализующий полный обмен SOCKS. Для основного HTTPS-клиента Node агент с поддержкой SOCKS может выполнить это согласование до TLS пункта назначения. Если вы реализуете обмен сами, накапливайте данные в соответствии с длинами полей протокола. Не гарантируется, что одно событие data содержит один полный ответ, а возвращённый связанный адрес не обязан совпадать с одной жёстко заданной в коде строкой байтов.

Зарегистрируйте обработку ошибок до того, как операция может завершиться неудачей, сохраните этап соединения в отчёте об ошибке и отправляйте протокол пункта назначения только после успешного согласования. Перехват ошибки предотвращает необработанное событие, но не исправляет неверный обмен.

Похожие статьи