مقبس المجال يونيكس: هل هناك شيء مثل إشارة "مشغول"؟

StackOverflow https://stackoverflow.com/questions/1478975

  •  16-09-2019
  •  | 
  •  

سؤال

يمكن أ عميل دفع البيانات من خلال مقبس المجال UNIX (نوع AF_UNIX) مشغول إذا كان الطرف الاستقبال لا يمكن التعامل مع الحمل؟

أو

يجب أن يكون هناك بروتوكول خادم العميل على رأس المقبس للتعامل مع التحكم في التدفق؟

هل كانت مفيدة؟

المحلول

ما لم تضم هذا في البروتوكول، لا توجد طريقة للخادم لإخبار العميل بإيقاف إرسال المعلومات مؤقتا.

نصائح أخرى

يمكنك بالتأكيد إجراء حظر إرسال إلى مقبس مجال UNIX. إذا كان Secreting Side's Screen Buffer ممتلئا، أو إذا كان عدد المخازن المؤقتة المتميزة (غير المسلمة) مرتفعة للغاية، فسيقوم المرسل بحظره.

Sock_Stream UNIX مآخذ المجال العمل مثل مآخذ TCP. يعمل Sock_Dgram UNIX مجال المجال يعمل مثل UDP، باستثناء أن مخططات مجال UNIX مضمون، والتسليم المباشر، في حين يمكن إعادة طلب مآخذ UDP أو إسقاطها. (أيضا، يمكن استخدام مآخذ مآخذ نطاق UNIX لإرسال واصفات الملفات وتسجيل بيانات اعتماد المستخدم بين العمليات، لا يمكن القيام بأي منهما مع TCP أو UDP أو الأنابيب.)

لذلك، نظرا لأن التسليم الداخلي مضمون من قبل جميع أنواع مآخذ مجال UNIX، يمكن للمستقبل التوقف عن الاستلام عندما تكون مشغولا بعمل أشياء أخرى، وسيتم حظر المرسل تلقائيا عند عدم توفر مساحة مخزنة أكثر (أو سيتم إخطارها لا يوجد المزيد من المساحة العازلة، إذا طلبوا عملية غير حظر على مقبسهم). ثم، عندما يبدأ جهاز الاستقبال في تلقي مرة أخرى، سيتم السماح للمرسل بإرسال المزيد.

بخلاف الخادم وجود بعض المعرفة عندما يكون "مشغول" وإرسال إشارة محددة مرة أخرى (مثل خدمة HTTP 503 غير متوفرة). يمكنك أيضا إعداد اتصال جانبي العميل بالتتبع بعد فترة زمنية معينة، وإذا حصلت على حدث مهلة، فسرحات أنه كخادم مشغول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top