EPIPE ב-Node.js לאחר התחברות לפרוקסי SOCKS
פרשו את EPIPE ב-Node לאחר התחברות לנקודת SOCKS ובדקו אם ה-handshake הנדרש הושלם.
אירוע ה-connect של ה-socket ב-Node אומר ש-TCP הגיע לפרוקסי. הוא לא אומר שהפרוקסי פתח חיבור ליעד.
שרת SOCKS5 מצפה למשא ומתן על שיטה, לאימות נבחר כלשהו ולבקשת יעד לפני תעבורת היישום. שליחת בקשת HTTP מיד עלולה לגרום לשרת לסגור את החיבור. כתיבה מאוחרת יותר עלולה אז להפיק EPIPE.
EPIPE לבדו אינו מוכיח ש-handshake חסר. הוא מדווח על כתיבה לחיבור שהצד השני שלו כבר אינו מקבל את התקשורת הזו. קראו את האירועים והתגובות הפרוטוקוליות הקודמים כדי לגלות מדוע הצד השני סגר.
השתמשו במחבר שמממש את חילופי ה-SOCKS המלאים. עבור לקוח ה-HTTPS הבסיסי של Node, סוכן מודע ל-SOCKS יכול לבצע את המשא ומתן הזה לפני ה-TLS של היעד. אם אתם מממשים את החילופים בעצמכם, צברו נתונים לפי אורכי השדות של הפרוטוקול. אין אחריות שאירוע data אחד יכיל תגובה שלמה אחת, והכתובת המלוכדת המוחזרת אינה חייבת להתאים למחרוזת בתים אחת המקודדת בקוד.
רשמו טיפול בשגיאות לפני שהפעולה עלולה להיכשל, שמרו את שלב החיבור בדוח השגיאה, ושלחו את פרוטוקול היעד רק לאחר שהמשא ומתן הצליח. תפיסת השגיאה מונעת אירוע לא מטופל; היא אינה מתקנת חילופים לא תקינים.