ECONNRESET (errno 104)

errno 104

LINUX

الرسالة الرسمية (كما تظهر على الشاشة): Connection reset by peer

يُبحث عنه أيضًا باسم: Connection reset by peer, errno 104, read ECONNRESET, socket hang up

طرفية Linux تشغّل strace مع إبراز استدعاء النظام الفاشل وقيمة errno
errno في Linux: تتبّع استدعاء النظام الفاشل بدقة قبل تغيير أي شيء.

ماذا يعني

تعني ECONNRESET، أي 'Connection reset by peer' (errno 104 في Linux و54 في macOS)، أن الطرف الآخر من اتصال TCP أنهاه فجأة بحزمة إعادة ضبط (reset). يبلغ عنها Node.js بصيغة 'socket hang up' أو 'read ECONNRESET'. أغلق الخادم البعيد أو وكيل أو جدار حماية الاتصال أثناء استخدامه.

ينطبق على: Linux, macOS (BSD errno), WSL, حاويات Docker

كيفية إصلاح ECONNRESET (errno 104)

  1. أعد المحاولة؛ فعمليات إعادة الضبط العابرة شائعة في الشبكات ويجب التعامل معها بإعادة المحاولة والتراجع (backoff)
  2. تحقق مما إذا كانت الخدمة البعيدة أُعيد تشغيلها أو انهارت في ذلك الوقت (سجلات الخادم وفحوصات السلامة)
  3. وحّد مهلات keep-alive: اجعل مهلة خمول العميل أقصر من مهلة الخادم أو موزع الأحمال حتى لا يعيد العميل استخدام اتصال أغلقه الخادم فعلاً
  4. افحص إعدادات TLS عند الاتصال بنقاط HTTPS؛ فعدم تطابق البروتوكول أو SNI يسبب عمليات إعادة ضبط أثناء المصافحة (handshake)
  5. ابحث عن جدران حماية أو أجهزة NAT أو وكلاء تُسقط الاتصالات الخاملة، وفعّل TCP keep-alive
  6. التقط الحركة بالأمر 'sudo tcpdump -i any host <ip> and port <port>' لمعرفة أي طرف يرسل RST

سبب حدوثه

تصل حزمة RST عندما يغلق الطرف الآخر مقبساً فيه بيانات غير مقروءة، أو ينهار، أو يرفض الاتصال في منتصفه، أو عندما يقطع جهاز وسيط (middlebox) تدفقات خاملة أو مشبوهة.

الأسئلة الشائعة

ما سبب 'read ECONNRESET' في Node.js؟

أغلق الخادم الاتصال بشكل غير متوقع، وغالباً بسبب إعادة استخدام اتصال keep-alive بعد مهلة خمول الخادم، أو انهيار، أو مشكلات TLS.

أخطاء ذات صلة

المصدر: Linux kernel errno.h · حلول كتبها المحررون وراجعوها (راجع السياسة التحريرية)

آخر تحديث: