EPIPE в Node.js след свързване със SOCKS прокси
Обяснете грешката EPIPE в Node след свързване със SOCKS крайна точка и проверете дали изискваният handshake е завършил.
Събитието connect на сокета в Node ви казва, че TCP е достигнал проксито. То не казва, че проксито е отворило връзка към дестинацията.
SOCKS5 сървърът очаква съгласуване на метод, евентуална избрана автентикация и заявка за дестинация преди трафика на приложението. Ако изпратите HTTP заявка веднага, сървърът може да затвори връзката. Следващ запис тогава може да предизвика EPIPE.
EPIPE сам по себе си не доказва липсващ handshake. Той съобщава за запис към връзка, чиято отсрещна страна вече не приема тази комуникация. Прочетете предишните събития и протоколни отговори, за да разберете защо страната е затворила.
Използвайте конектор, който реализира пълния SOCKS обмен. За основния HTTPS клиент на Node, SOCKS-съобразен агент може да извърши това съгласуване преди TLS към дестинацията. Ако реализирате обмена сами, натрупвайте данни според дължините на полетата на протокола. Едно data събитие не е гарантирано, че съдържа един пълен отговор, и върнатият свързан адрес не е задължително да съвпада с един твърдо зададен в кода байтов низ.
Регистрирайте обработка на грешки, преди операцията да може да се провали, запазете етапа на връзката в отчета за грешката и изпращайте протокола на дестинацията само след успешно съгласуване. Прихващането на грешката предотвратява необработено събитие; то не поправя невалиден обмен.