سؤال

ويتم تكوين خدمة الإنترنت لفضح بعض البيانات الخاصة به عندما تلقي إشارة USR1. سيتم إرسال إشارة من قبل خادم xinetd عندما يتلقى طلبا من عميل بعيد، على سبيل المثال نورث كارولاينا MYSERVER 50666. عندما يتلقى خادم الويب إشارة USR1، فإنه يفتح أنابيب FIFO مخصص، يكتب بياناته إلى الأنابيب، ومن ثم إغلاق الأنبوب. في هذه الأثناء، والخادم xinetd يقرأ الأنابيب ويتغذى على العميل البعيد.

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

وفيما يلي مقتطفات بسيطة لشرح عملية:

وخادم الويب: (webserver.py)

def SendStream(data, pipe):
  try:
    for i in data:
      pipe.write(i + '\n') 
      pipe.flush()
  finally:
      pipe.close()

def Serve():
  threading.Thread(target=SendStream, args=(data, pipe)).start()

والخادم xinetd.d: (spitter.py)

def Serve():
  if not os.path.exists(PIPE_FILE):
    os.mkfifo(PIPE_FILE)
  os.kill(server_pid, signal.SIGUSR1)
  for i in open(PIPE_FILE):
    print i,

وإذا ما حدث بالضبط للتسبب في الحزب الاتحادي الديمقراطي؟ كيفية تحريك ذلك؟ الإصلاح الحالي ألغيت ربط ملف الأنابيب وإعادة إنشائها في كل مرة لتجنب أي بقايا لكني لا أعرف إذا كان هذا هو الحل الصحيح.

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

المحلول

إذا تحصل نسختين من splitter.py يشغل في الوقت نفسه، سوف تكون هناك مشكلة وأي شيء تقريبا ما يحدث لك هو قانوني. حاول إضافة قيمة معرف العملية إلى webserver.py، أي:

وpipe.write (شارع (os.getpid ()) + انا + '\ ن')

وهذا يمكن إلقاء الضوء.

نصائح أخرى

وليس هناك ما يكفي لتصحيح هنا. كنت لا تظهر كيفية تعامل الخادم الإشارات، أو فتح الأنبوب.

إذا كان ذلك ممكنا أوصي عدم استخدام الإشارات. انهم شعر بما فيه الكفاية في C، فما باللك مع خصوصيات الثعبان الخاصة المضافة على القمة.

وهذا يعني أن المشكلة الحقيقية هي أن هناك عدة عملاء موجودة. وقد تساءل الخادم / اعتداء من العملاء غير معروف الأخرى التي لم تكن في البداية يتم الاتفاق عليها مع العملاء ومتأكد من أنها سوف تنهار تحت التصميم الحالي. وقد تم نشر إصلاح لمعالجة هذه المسألة. لذا اشتباه اندي هو الصحيح. شكرا لكم أيها الرجال!

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