बीएसडी सॉकेट प्रोग्रामिंग के संदर्भ में मैं प्रत्येक उदाहरण और चर्चा में भाग लेता हूं, ऐसा लगता है कि फ़ाइल डिस्क्रिप्टर को I/O मोड को अनब्लॉक करने के लिए अनुशंसित तरीका O_NONBLOCK
का उपयोग कर रहा है fcntl()
पर ध्वज, उदाहरण के लिएयूनिक्स नॉनब्लॉकिंग I/O: O_NONBLOCK बनाम FIONBIO
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
मैं दस साल के लिए UNIX में नेटवर्क प्रोग्रामिंग कर दिया गया है, और हमेशा FIONBIO ioctl()
कॉल का इस्तेमाल किया है यह करने के लिए:
int opt = 1;
ioctl(fd, FIONBIO, &opt);
कभी वास्तव में क्यों पर बहुत विचार दे दी है। बस इसे इस तरह से सीखा।
क्या किसी के पास एक या दूसरे के संभावित संबंधित गुणों पर कोई टिप्पणी है? मुझे लगता है कि पोर्टेबिलिटी लोकस कुछ हद तक अलग है, लेकिन यह नहीं पता कि ioctl_list(2)
किस हद तक व्यक्तिगत ioctl
विधियों के उस पहलू से बात नहीं करता है।
मैं इसके लिए ioctl() का उपयोग करता हूं क्योंकि यह मुझे केवल एक सिस्कोल खर्च करता है ताकि fcntl() के लिए दो के बजाय गैर-अवरोधन मोड सक्षम किया जा सके। इसके अतिरिक्त, Windows ioctlsocket() API इस कार्यक्षमता के प्रयोजनों के लिए ioctl() के बराबर है। –
nginx यह कर सकता है अगर यह कर सकता है, और इसे एक टिप्पणी के साथ चिह्नित करता है "ioctl (FIONBIO) एकल सिस्कल के साथ एक गैर-अवरोधन मोड सेट करता है।" अब स्वीकार्य 2 है जो आपको एक कनेक्शन स्वीकार करने देता है और इसे उसी सिस्कोल में गैर-अवरुद्ध मोड में डाल देता है। – Eloff