2012-01-03 10 views
12

निम्न कोड मानें जहां "सॉक" टीसीपी सॉकेट के लिए एक हैंडल है जिसे पहले एपीएफडी द्वारा नामित एपोल फ़ाइल डिस्क्रिप्टर के साथ पंजीकृत किया गया था।क्या इसे बंद करने से पहले एपोल से सॉकेट को अपनाना आवश्यक है?

epoll_ctl(epfd, EPOLL_CTL_DEL, sock, &ev); 
close(sock); 

क्या सॉकेट को बाद में बंद होने के लिए अभी भी epoll_ctl को कॉल करना आवश्यक है? या क्या सॉकेट इसे बंद करने के परिणामस्वरूप पूरी तरह से अपंजीकृत हो जाता है?

उत्तर

22
man page से

:

Q6 एक फ़ाइल वर्णनकर्ता यह सब epoll से निकाले जाने का कारण बंद करने विल स्वचालित रूप से सेट करता है?

ए 6 हां, लेकिन निम्न बिंदु से अवगत रहें। एक फ़ाइल डिस्क्रिप्टर एक खुली फ़ाइल विवरण के संदर्भ में है (open (2) देखें)। जब भी कोई वर्णनकर्ता के माध्यम से दोहराया गया है dup (2), dup2 (2), fcntl (2) F_DUPFD, या fork (2), एक नई फ़ाइल वर्णनकर्ता एक ही फ़ाइल खोलने वर्णन की चर्चा करते हुए बनाई गई है। एक खुली फ़ाइल विवरण तब तक मौजूद है जब तक कि सभी फ़ाइल वर्णन करने वाले वर्णनकर्ता बंद कर दिए गए हैं। एक फ़ाइल वर्णनकर्ता एक epoll केवल सभी फाइल वर्णनकर्ता की चर्चा करते हुए अंतर्निहित फ़ाइल खोलने वर्णन के बाद सेट से हटा बंद कर दिए गए है (या उससे पहले अगर वर्णनकर्ता स्पष्ट का उपयोग कर निकाल दिया जाता है epoll_ctl (2) EPOLL_CTL_DEL)। यह का अर्थ है कि फ़ाइल डिस्क्रिप्टर के बाद भी epoll सेट का हिस्सा बंद हो गया है, तो उस फ़ाइल डिस्क्रिप्टर के लिए ईवेंट की सूचना दी जा सकती है यदि अन्य फ़ाइल वही अंतर्निहित फ़ाइल विवरण का जिक्र करने वाले वर्णनकर्ता खुले रहते हैं।

+0

धन्यवाद! मैंने "मैन एपोल_क्टल", "मैन एपोल_क्रेट" को एक जवाब की तलाश में रखा, लेकिन "मैन एपोल" के लिए सारांश मैन पेज के बारे में भूल गया। – selbie

+0

इसलिए प्रदान किया गया है कि किसी ने इसे डुप्लिकेट नहीं किया है() और प्रक्रिया को फोर्क नहीं किया गया है, तो आप ठीक हैं? – MarkR

+0

हां, मुझे लगता है कि यह अच्छी तरह से बताता है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^