मेरे पास एक सी ++ ऐप है जो मानक सॉकेट कॉल का उपयोग करता है और मैं जानना चाहता हूं कि क्या मैं बता सकता हूं कि कोई सॉकेट अभी भी कोई डेटा भेजने या प्राप्त किए बिना खुला है या नहीं। क्या कोई विश्वसनीय select
या ioctlsocket
कॉल कर सकता हूं?मैं कैसे जांच सकता हूं कि एक सॉकेट अभी भी खुला है?
उत्तर
यदि आप एक बाइट प्राप्त करने का प्रयास करते हैं, तो आप कई त्रुटियों को प्राप्त कर सकते हैं, यदि आप एक गैर-अवरुद्ध सॉकेट रखते हैं, और वैध कनेक्शन पर प्राप्त करने का प्रयास करते हैं, तो आपको त्रुटि WSAEWOULDBLOCK मिल जाएगी।
यह जानने के बाद हम इतनी
bool connected(SOCKET sock)
{
char buf;
int err = recv(sock, &buf, 1, MSG_PEEK);
if(err == SOCKET_ERROR)
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{return false;}
}
return true;
}
की तरह एक गैर अवरुद्ध सॉकेट जांच कर सकते हैं के रूप में आप return value of recv recv से देख सकते हैं एक समय समाप्ति या डिस्कनेक्ट के लिए कई अन्य त्रुटियों वापस आ सकते हैं, मैं belive WSAEWOULDBLOCK केवल मूल्य भी हो रहा है अगर कोई त्रुटि हुई लेकिन फिर भी कनेक्ट हो गया तो वापस लौटें, लेकिन आप वापसी मूल्यों की उस सूची को दोबारा जांचना चाहेंगे। इसके अलावा आरईवी (एमएसजी_PEEK) में इस्तेमाल किया जाने वाला ध्वज का अर्थ है कि जब भी आप चेक के बाद बाद में देखते हैं तो डेटा अभी भी पढ़ा जा सकता है, इसलिए आपको डेटा के एक बाइट खोने की चिंता करने की आवश्यकता नहीं है।
मुझे विश्वास है कि यह केवल गैर-अवरुद्ध सॉकेट के साथ अच्छी तरह से काम करेगा, क्योंकि यह डेटा प्राप्त होने तक अवरुद्ध हो सकता है। यदि आप ब्लॉकिंग सॉकेट का उपयोग करना चाहते हैं तो आप इसे इस चेक से पहले ioctlsocket के साथ गैर-ब्लॉक सेट करना चाहते हैं, फिर इसे वापस कैसे करें।
सॉकेट को अवरुद्ध करने के लिए आप चयन का उपयोग करेंगे। –
एक सॉकेट "खुली" होने से आपको एंड-टू-एंड कनेक्टिविटी के साथ मदद नहीं मिलती है। यह सुनिश्चित करने का एकमात्र तरीका है कि आप दूसरे छोर के साथ संवाद कर सकते हैं, ठीक है, दूसरे छोर के साथ संवाद करना है।
आपके द्वारा डिज़ाइन किए गए किसी भी प्रोटोकॉल में, आपको इस जांच व्यवहार को लागू करने के बारे में सोचना चाहिए। यदि यह आपका प्रोटोकॉल नहीं है, तो कभी-कभी इसे स्नेही तरीके से करने के तरीके होते हैं (उदाहरण के लिए एफ़टीपी एक बहुत छोटी, बेकार फ़ाइल को जांचने के लिए कि क्या एफ़टीपी पोर्ट अभी भी खुले हैं)।
- 1. मैं कैसे जांच सकता हूं कि ल्यूसीन इंडेक्सवाइटर उदाहरण वैध/खुला है या नहीं?
- 2. मैं कैसे जांच सकता हूं कि एक्सप्रेस
- 3. मैं कैसे जांच सकता हूं कि JQuery
- 4. Umbraco जांच कर लें कि नोड है अभी भी
- 5. कैसे बताएं कि PHP में सॉकेट खुला है या नहीं?
- 6. मैं कैसे बता सकता हूं कि मेरा संदर्भ अभी भी मान्य है या नहीं?
- 7. सॉकेट अभी भी कनेक्ट होने पर कैसे जांचें?
- 8. मैं कैसे जांच सकता हूं कि एक (टीसीपी) सॉकेट (डी) सी # में जुड़ा हुआ है या नहीं?
- 9. मैं कैसे जांच सकता हूं कि रूबी सरणी
- 10. मैं कैसे जांच सकता हूं कि एक गेम ऑब्जेक्ट दूसरे को देख सकता है या नहीं?
- 11. क्या मैं देख सकता हूं कि टाइमर अभी भी चल रहा है या नहीं?
- 12. मैं कैसे जांच सकता हूं कि एक संकलित बाइनरी 32 बिट या 64it है या नहीं?
- 13. मैं कैसे जांच सकता हूं कि एक सामान्य विधि पैरामीटर एक मान प्रकार है या नहीं?
- 14. मैं कैसे जांच सकता हूं कि एक perl संस्करण कुछ मूल्य से अधिक नहीं है?
- 15. मैं अभी भी
- 16. मैं कैसे जांच सकता हूं कि एक भंडार बेकार है या नहीं?
- 17. जांचें कि सॉकेट कनेक्ट है या नहीं
- 18. सॉकेट खुला रखा जाना चाहिए सकता है या
- 19. मैं कैसे जांच सकता हूं कि एक फ़ंक्शन कॉल चेतावनी में परिणाम देता है या नहीं?
- 20. मैं कैसे जांच सकता हूं कि एक RabbitMQ संदेश कतार मौजूद है या नहीं?
- 21. मैं कैसे जांच सकता हूं कि डिवाइस पर एक Gyroscope मौजूद है या नहीं?
- 22. मैं कैसे जांच सकता हूं कि एक संरचना को तत्काल किया गया है या नहीं?
- 23. मैं कैसे जांच सकता हूं कि SQL परिणाम में एक न्यूलाइन वर्ण है या नहीं?
- 24. मैं कैसे जांच सकता हूं कि कोई char एक अक्षर या संख्या है या नहीं?
- 25. मैं कैसे जांच सकता हूं कि कोई ऑब्जेक्ट पाइथन में एक इटरेटर है या नहीं?
- 26. मैं पीडीओ पैरामीटर की सरणी कैसे पास कर सकता हूं फिर भी अभी भी उनके प्रकार निर्दिष्ट कर सकता हूं?
- 27. मैं कैसे जांच सकता हूं कि UIView एनिमेट कर रहा है या नहीं?
- 28. मैं अभी भी माता-पिता
- 29. मैं कैसे जांच सकता हूं कि क्या मैं पर्ल में एक यूआरआई ऑब्जेक्ट पर होस्ट() को कॉल कर सकता हूं?
- 30. जांच रहा है कि प्रक्रिया अभी भी चल रही है या नहीं?
क्या आपका मतलब यह है कि दूसरी तरफ सॉकेट बंद कर दिया गया है या नहीं? –
हां। मेरा ऐप विंडोज पर चलता है और यदि पीसी हाइबरनेट किया जाता है, तो जब यह सॉकेट लौटाता है तो यह मान्य नहीं होगा क्योंकि दूसरे छोर ने इसे बंद कर दिया है (और जैसा कि मेरा ऐप निलंबित है, मुझे कोई सूचना नहीं मिली है)। – Rob