سؤال

لدي التعليمة البرمجية التالية:

  def LSCPHandler.send_message(message, hostname, port)
s = TCPSocket.open(hostname, port)
s.print message
ret = s.recv(1024)
s.close 
LSCPHandler.parse_error(ret)
return ret  

نهاية

الذي يعمل على ما يرام ، عادة.الخادم أنا أتحدث إلى إرجاع استجابة بسرعة كبيرة, عادة, و كل شيء على ما يرام.

ثم, اليوم, حدث خطأ في الخادم.ليست مشكلتي, ولكن هذا أدى بي الى تطبيق كامل معلقة في انتظار recv إلى الوقت.هذا ليس الأمثل.

هل هناك طريقة الوقت recv إذا أنا لا أسمع شيئا مرة أخرى على الفور ؟ حاولت أبحث في روبي الوثائق ، لكنها في الحقيقة يحيرني(أيTCPSocket إلا بتنفيذ ثلاثة طرق لا أحد منهم فتح أو recv و هو الوالد فئة من مأخذ لا implemente هذه الأساليب أيضا.ومأخذ الأم الطبقة يبدو أن الكائن ؟ أنا شاملة الخلط)

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

المحلول

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

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top