EPIPE w Node.js po połączeniu z proxy SOCKS
Zinterpretuj błąd EPIPE w Node po połączeniu z punktem SOCKS i sprawdź, czy wymagany uścisk dłoni (handshake) został ukończony.
Zdarzenie connect gniazda Node informuje, że TCP dotarło do proxy. Nie mówi, że proxy otworzyło połączenie z miejscem docelowym.
Serwer SOCKS5 oczekuje przed ruchem aplikacji negocjacji metody, ewentualnego wybranego uwierzytelnienia i żądania miejsca docelowego. Natychmiastowe wysłanie żądania HTTP może spowodować zamknięcie połączenia przez serwer. Późniejszy zapis może wtedy wywołać EPIPE.
Sam EPIPE nie dowodzi brakującego handshake'u. Zgłasza zapis do połączenia, którego druga strona nie przyjmuje już tej komunikacji. Przeczytaj wcześniejsze zdarzenia i odpowiedzi protokołu, aby ustalić, dlaczego druga strona zamknęła połączenie.
Użyj konektora, który implementuje pełną wymianę SOCKS. Dla podstawowego klienta HTTPS Node agent rozumiejący SOCKS może wykonać tę negocjację przed TLS miejsca docelowego. Jeśli samodzielnie implementujesz wymianę, gromadź dane zgodnie z długościami pól protokołu. Nie ma gwarancji, że jedno zdarzenie data zawiera jedną pełną odpowiedź, a zwrócony adres powiązany nie musi odpowiadać jednemu zaszytego w kodzie ciągowi bajtów.
Zarejestruj obsługę błędów, zanim operacja może się nie powieść, zachowaj etap połączenia w raporcie błędu i wysyłaj protokół miejsca docelowego dopiero po udanej negocjacji. Przechwycenie błędu zapobiega nieobsłużonemu zdarzeniu; nie naprawia jednak nieprawidłowej wymiany.