मैं एक udp सर्वर/क्लाइंट एप्लिकेशन पर काम कर रहा हूं।रीड_फॉम फ़ंक्शन गैर-अवरुद्ध करना
जानने अगर ग्राहक के किसी भी नीचे है के लिए, सर्वर क्लाइंट के लिए एक हाथ मिलाना संदेश भेजता है। फिर, ग्राहक कुछ डेटा भेजने के लिए क्लाइंट की प्रतिक्रिया के लिए इंतजार कर रहा है ताकि यह सुनिश्चित किया जा सके कि ग्राहक सक्रिय है। इसके लिए सर्वर recvfrom()
पर कॉल करता है जब तक कि ग्राहक वापस जवाब न दे, लेकिन यदि ग्राहक नीचे है, तो सर्वर recvfrom()
पर कॉल में अनन्त रूप से अवरुद्ध हो जाता है।
मैं अपने सर्वर पर ऐसी कार्यक्षमता को कार्यान्वित करना चाहता हूं ताकि यह किसी विशिष्ट समय के लिए recvfrom()
पर कॉल में प्रतीक्षा करे (2 सेकंड कहें)। यदि ग्राहक से 2 सेकंड के भीतर कोई डेटा प्राप्त नहीं हुआ है, तो ग्राहक को मृत माना जाता है और recvfrom()
रिटर्न।
क्या ऐसा करने का कोई तरीका है? मैंने इंटरनेट की खोज की लेकिन MSG_DONTWAIT
ध्वज सेट करने जैसे समाधान मिले, जो डेटा प्राप्त होने पर तत्काल लौटता है, लेकिन मेरे मामले में, मैं तुरंत वापस लौटने के लिए recvfrom()
नहीं चाहता हूं लेकिन समय की विशिष्ट अवधि के लिए डेटा की प्रतीक्षा करता हूं, और उसके लिए कोई डेटा प्राप्त नहीं होता है विशिष्ट अवधि, recvfrom()
फ़ंक्शन को फिर से चालू करना चाहिए।
किसी भी मदद की सराहना की है।
ठीक है आप विश्वसनीय सेवा लागू करना चाहते हैं। आप [recvfrom() फ़ंक्शन सेट कर सकते हैं (http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.hala001/rcvf.htm) में ब्लॉकिंग मोड, [fcntl() या ioctl() फ़ंक्शन का उपयोग करके] (http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.hala001/ rcvf.htm)। इसके अलावा इस [यूडीपी विश्वसनीय डेटा सेवा कार्यान्वयन] पढ़ें (http://stackoverflow.com/questions/8353970/udp-reliable-data-service-implementation) –
चेकआउट ** [c - विनसॉक recvfrom के लिए सेट टाइमआउट - स्टैक ओवरफ़्लो] (http://stackoverflow.com/questions/1824465/set-timeout-for-winsock-recvfrom)** –
भी [की जाँच] (http://msdn.microsoft.com/en-us/library/windows/desktop /ms740120%28v=vs.85%29.aspx) .it आपको ** WSARecv() ** में स्पष्ट स्पष्टीकरण देता है (फ़ंक्शन के लिए नियम अवरुद्ध कर रहा है)। –