मैं कच्चे सॉकेट इंटरफेस (import socket
) का उपयोग कर पायथन 2.7.5 में एक ऐप लिख रहा हूं।पायथन: किसी सॉकेट को डिस्कनेक्ट करते समय पता लगाएं?
मुझे यह जानने की ज़रूरत है कि कोई तरीका है या तो मैं किसी प्रकार का ईवेंट पंजीकृत कर सकता हूं, या एक नियमित अंतराल पर आसानी से परीक्षण कर सकता हूं, अगर कोई टीसीपी सॉकेट कनेक्शन अभी भी जुड़ा हुआ है और स्थापित है।
मुझे मिली अधिकांश सलाहएं कहती हैं कि "बस इसे पढ़ने का प्रयास करें; अगर यह बंद है तो आपको कोई त्रुटि या कोई बाइट नहीं मिलेगा।" हालांकि, कभी-कभी मैं read
से इसके लिए तैयार नहीं हूं लेकिन मैं अभी भी जानना चाहता हूं कि सॉकेट बंद हो गया है, इसलिए उदाहरण के लिए मैं मैन्युअल रूप से मैन्युअल रूप से पुनः कनेक्ट कर सकता हूं।
सॉकेट से read
आईएनजी बफर से पढ़ने वाले बाइट को हटा देगा, इसलिए कनेक्शन के लिए परीक्षण करने के लिए बस read
आईएनजी केवल व्यवहार्य प्रतीत नहीं होता है।
कनेक्शन लचीलापन की जांच करने के लिए पृष्ठभूमि धागा होने के साथ मेरे साथ ठीक रहेगा। यह धागा यह देखने के लिए प्रति सेकंड एक बार कह सकता है कि कनेक्शन लाइव है या नहीं; यदि इसे गिरा दिया गया है, तो यह एक फ़ंक्शन कॉल कर सकता है, या एक चर या कुछ अन्य चीज सेट कर सकता है ताकि ऐप कनेक्शन बंद कर सके। यह जानना क्यों बंद हुआ (सहकर्मी, टाइमआउट, आदि द्वारा रीसेट) और भी उपयोगी होगा ....
इस पर कोई सलाह?
का उपयोग होता है, लिनक्स के लिए 'select() '(या' epoll() 'का उपयोग करें) – tMC
संबंधित: http://stackoverflow.com/questions/17705239/is-there-a-way-to-detect-that-tcp-socket-has -बेन-क्लोज-बाय-द-रिमोट-पीयर-बुद्धि (टीएल; डीआर: यह पता लगाने का कोई अच्छा तरीका नहीं है कि कनेक्शन बंद कर दिया गया है जब तक कि आप पहले सॉकेट से आने वाले सभी बाइट्स को पढ़ने के इच्छुक नहीं हैं; टीसीपी सॉकेट को जानबूझकर इस तरह कार्यान्वित किया जाता है क्योंकि वे फीफो इवेंट ऑर्डरिंग के विचार पर आधारित होते हैं, यानी वे चाहते हैं कि आप इनकमिंग डेटा को क्रम में पढ़ लें, और केवल इसे पढ़ने के बाद स्ट्रीम के अंत के बारे में जानें) –