EPIPE في Node.js بعد الاتصال بوكيل SOCKS
فسّر خطأ EPIPE في Node بعد الاتصال بنقطة SOCKS وتحقق مما إذا كانت المصافحة المطلوبة قد اكتملت.
يخبرك حدث connect في مقبس Node بأن TCP وصل إلى الوكيل. لكنه لا يقول إن الوكيل فتح اتصالاً بالوجهة.
يتوقع خادم SOCKS5 تفاوضاً على الطريقة، وأي مصادقة مختارة، وطلب وجهة قبل حركة التطبيق. إرسال طلب HTTP فوراً قد يجعل الخادم يغلق الاتصال. وقد تؤدي كتابة لاحقة إلى EPIPE.
لا يثبت EPIPE وحده غياب المصافحة. فهو يبلّغ عن كتابة إلى اتصال لم يعد الطرف الآخر فيه يقبل ذلك التواصل. اقرأ الأحداث والردود البروتوكولية السابقة لمعرفة سبب إغلاق الطرف الآخر.
استخدم موصّلاً ينفذ تبادل SOCKS كاملاً. بالنسبة لعميل HTTPS الأساسي في Node، يمكن وكيل يدعم SOCKS تنفيذ ذلك التفاوض قبل TLS الخاص بالوجهة. وإذا نفّذت التبادل بنفسك، فاجمع البيانات وفق أطوال الحقول في البروتوكول. ليس مضموناً أن يحتوي حدث بيانات واحد على رد كامل، كما أن العنوان المرتبط المُعاد ليس بالضرورة مطابقاً لسلسلة بايتات واحدة مضمّنة في الشيفرة.
سجّل معالجة الأخطاء قبل أن تفشل العملية، واحتفظ بمرحلة الاتصال في تقرير الخطأ، وأرسل بروتوكول الوجهة فقط بعد نجاح التفاوض. التقاط الخطأ يمنع حدثاً غير معالَج؛ لكنه لا يصلح تبادلاً غير صالح.