EPIPE στο Node.js μετά τη σύνδεση με διακομιστή μεσολάβησης SOCKS
Ερμηνεύστε το EPIPE του Node μετά τη σύνδεση με τελικό σημείο SOCKS και ελέγξτε αν ολοκληρώθηκε η απαιτούμενη χειραψία.
Το συμβάν connect του socket του Node σάς λέει ότι το TCP έφτασε στον μεσολαβητή. Δεν λέει ότι ο μεσολαβητής άνοιξε σύνδεση προς τον προορισμό.
Ένας διακομιστής SOCKS5 περιμένει διαπραγμάτευση μεθόδου, τυχόν επιλεγμένη ταυτοποίηση και αίτημα προορισμού πριν από την κίνηση της εφαρμογής. Η άμεση αποστολή αιτήματος HTTP μπορεί να κάνει τον διακομιστή να κλείσει τη σύνδεση. Μια μεταγενέστερη εγγραφή μπορεί τότε να παράγει EPIPE.
Το EPIPE από μόνο του δεν αποδεικνύει ότι λείπει η χειραψία. Αναφέρει εγγραφή σε σύνδεση της οποίας ο ομότιμος δεν δέχεται πλέον αυτή την επικοινωνία. Διαβάστε τα προηγούμενα συμβάντα και τις απαντήσεις του πρωτοκόλλου για να βρείτε γιατί έκλεισε ο ομότιμος.
Χρησιμοποιήστε έναν σύνδεσμο που υλοποιεί την πλήρη ανταλλαγή SOCKS. Για τον βασικό πελάτη HTTPS του Node, ένας πράκτορας που γνωρίζει SOCKS μπορεί να εκτελέσει αυτή τη διαπραγμάτευση πριν από το TLS του προορισμού. Αν υλοποιείτε μόνοι σας την ανταλλαγή, συσσωρεύστε δεδομένα σύμφωνα με τα μήκη πεδίων του πρωτοκόλλου. Δεν είναι εγγυημένο ότι ένα συμβάν data περιέχει μία πλήρη απάντηση, και η δεσμευμένη διεύθυνση που επιστρέφεται δεν χρειάζεται να ταιριάζει με μία σκληρά κωδικοποιημένη ακολουθία byte.
Καταχωρίστε τη διαχείριση σφαλμάτων πριν μπορέσει να αποτύχει η λειτουργία, διατηρήστε το στάδιο της σύνδεσης στην αναφορά σφάλματος και στείλτε το πρωτόκολλο προορισμού μόνο αφού πετύχει η διαπραγμάτευση. Η σύλληψη του σφάλματος αποτρέπει ένα μη διαχειρισμένο συμβάν· δεν διορθώνει μια άκυρη ανταλλαγή.