2011-10-03 11 views
5

मैं सी में लिनक्स (लाल-झोपड़ी) में सिंगल थ्रेडेड सर्वर बनाने की कोशिश कर रहा हूं जो एकाधिक सॉकेट को सुनेंगे।स्वीकृति पर त्रुटि: संसाधन अस्थायी रूप से अनुपलब्ध

int flagss = fcntl(socketfds[j],F_GETFL,0); 
flagss |= O_NONBLOCK; 
fcntl(socketfds[j],F_SETFL,flagss); 

मैं:

ERROR on accept: Resource temporarily unavailable 

अन्यथा सब कुछ पूरी तरह से काम करता है

मैं गैर अवरुद्ध सॉकेट उपयोग करने के लिए, जब मैं इस तरह गैर अवरुद्ध करने निशानी नहीं लगाई जरूरत है।

उत्तर

12

संसाधन अस्थायी रूप से अनुपलब्ध है EAGAIN और यह वास्तव में एक त्रुटि नहीं है। इसका मतलब है "मेरे पास अभी आपके लिए जवाब नहीं है और आपने मुझे इंतजार न करने के लिए कहा है, इसलिए यहां मैं जवाब के बिना वापस आ रहा हूं।"

यदि आप ऐसा करने के लिए प्रतीत होता है तो गैर-अवरुद्ध करने के लिए एक सुनवाई सॉकेट सेट करते हैं, accept किसी भी क्लाइंट को कनेक्ट करने का प्रयास करने पर उस मान पर इरनो सेट करना होता है। आप select (पारंपरिक) या poll (अर्थात् समकक्ष समकक्ष, नए इंटरफ़ेस, जब तक आपको इसके बिना कुछ पुराने यूनिक्स पर चलाने की आवश्यकता नहीं है) या epoll (हजारों वर्णनकर्ताओं, लिनक्स-विशिष्ट) सिस्टम कॉल के लिए अनुकूलित करने के लिए आने वाले कनेक्शन की प्रतीक्षा कर सकते हैं।

बेशक आप सुनवाई सॉकेट या किसी भी डेटा सॉकेट पर डेटा की प्रतीक्षा करने के लिए poll (या किसी भी विकल्प) का उपयोग करेंगे।

+1

धन्यवाद, मैंने चयन का उपयोग किया है और यह – oznus

+1

अंतर्निहित अर्थ के बारे में स्पष्टीकरण के लिए धन्यवाद! –

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