EPIPE (errno 32)
errno 32
الرسالة الرسمية (كما تظهر على الشاشة): Broken pipe
يُبحث عنه أيضًا باسم: Broken pipe, errno 32, EPIPE broken pipe, write EPIPE
ماذا يعني
تعني EPIPE، أي 'Broken pipe' (errno 32)، أن برنامجاً كتب إلى أنبوب أو مقبس أُغلق طرف القراءة فيه مسبقاً. تواجهها خطوط الأنابيب في الصدفة عندما ينتهي الأمر التالي مبكراً (مثل 'head')، وتواجهها الخوادم عندما ينقطع العميل قبل إرسال الاستجابة.
ينطبق على: Linux, macOS (BSD errno), WSL, حاويات Docker
كيفية إصلاح EPIPE (errno 32)
- في خطوط أنابيب الصدفة، يكون الأنبوب المكسور بعد 'head' أو 'grep -q' متوقعاً وغير ضار غالباً
- لانقطاعات SSH بالرسالة 'Broken pipe'، أضف 'ServerAliveInterval 60' إلى ~/.ssh/config لإبقاء الجلسات الخاملة حية
- في الخوادم، تعامل مع EPIPE على أنه انقطاع عادي للعميل: توقف عن الكتابة وأغلق الاتصال
- في Python، التقط BrokenPipeError؛ وفي Node.js عالج أحداث 'error' على التدفقات (streams) لتجنب الانهيارات
- إذا حدث EPIPE على اتصال بقاعدة بيانات أو upstream، فافحص مهلات الخمول في ذلك الطرف وفعّل keep-alive أو منطق إعادة الاتصال
- إذا كانت البرامج تتوقف بصمت، فتذكّر أن SIGPIPE ينهي العمليات افتراضياً؛ تجاهله ('signal(SIGPIPE, SIG_IGN)') وافحص أخطاء الكتابة بدلاً من ذلك
سبب حدوثه
تؤدي الكتابة إلى أنبوب أو مقبس تدفق بلا قارئ إلى توليد SIGPIPE وEPIPE. وأسبابه المعتادة: قارئون ينتهون مبكراً، وعملاء ينقطعون، ومهلات في الطرف البعيد، وأجهزة شبكة وسيطة تغلق الاتصالات الخاملة.
الأسئلة الشائعة
لماذا يقول SSH: 'Broken pipe'؟
كان الاتصال خاملاً أو انقطعت الشبكة، فأغلقه الخادم أو موجّه. وتمنع إعدادات keep-alive في إعداد SSH معظم الحالات.
أخطاء ذات صلة
المصدر: Linux kernel errno.h · حلول كتبها المحررون وراجعوها (راجع السياسة التحريرية)
آخر تحديث: