2013-01-17 24 views
47

क्या एक सॉकेट send() आदेश पर एक Resource temporarily unavailable त्रुटि पैदा कर सकता है एक "संसाधन अस्थायी रूप से अनुपलब्ध" जुर्राब भेजने() आदेश पर पैदा कर सकता है? सॉकेट को AF_UNIX, SOCK_STREAM के रूप में सेट किया गया है। यह ज्यादातर समय काम करता है, लेकिन कभी-कभी यह त्रुटि प्राप्त होती है। सॉकेट का प्राप्त करने का अंत ठीक से काम करता प्रतीत होता है।क्या

मैं जानता हूँ कि यह बहुत विस्तृत नहीं है, लेकिन मैं सिर्फ सामान्य विचारों की तलाश कर रहा हूँ। धन्यवाद!

+0

एक बेहतर नियंत्रण प्राप्त करने के लिए विचार करें क्या यह संबंधित है? http://stackoverflow.com/questions/5737493/sendto-resource-temporarily-unavailable-errno-11 – paddy

+2

क्या आप अपनी सॉकेट को O_NONBLOCK पर सेट कर रहे हैं? –

+0

मुझे नहीं लगता कि यह उस पोस्ट से संबंधित है। मेरे सॉकेट SOCK_STREAM हैं जो मुझे विश्वास है कि अवरुद्ध कर रहे हैं जो मैं चाहता हूं। – giroy

उत्तर

59

"Resource temporarily unavailable"EAGAIN से संबंधित त्रुटि संदेश है, जिसका अर्थ है कि ऑपरेशन अवरुद्ध होगा लेकिन नॉनब्लॉकिंग ऑपरेशन का अनुरोध किया गया था। send() के लिए, कि के किसी भी कारण हो सकता है:

  • स्पष्ट fcntl() साथ nonblocking के रूप में फ़ाइल वर्णनकर्ता अंकन; या
  • send() को MSG_DONTWAIT झंडा गुजर; या
  • SO_SNDTIMEO सॉकेट विकल्प के साथ एक भेजें टाइमआउट सेट करना।
+0

मेरी समस्या का कारण प्रेषण टाइमआउट सेट कर रहा था। मदद के लिए शुक्रिया! – giroy

+0

@ कैफ, मेरे मामले में, दो तरफ विभिन्न एमटीयू आकार विन्यास एसटीपीपी एसोसिएशन टीएक्स्यूयू को ओवरफ्लोउन कर रहा था जब पैकेट एक्सचेंज की उच्च दर हो रही थी। एमटीयू दोनों प्रणालियों पर समान बनाने से समस्या दूर हो गई। लेकिन क्या कोई यह बता सकता है कि समस्या के पीछे क्या कारण है? –

30

ऐसा इसलिए है क्योंकि आप non-blocking सॉकेट का उपयोग कर रहे हैं और आउटपुट बफर भरा हुआ है।

send() आदमी पेज

When the message does not fit into the send buffer of the socket, 
    send() normally blocks, unless the socket has been placed in non-block- 
    ing I/O mode. In non-blocking mode it would return EAGAIN in this 
    case. 

EAGAIN से त्रुटि "अस्थायी रूप से अनुपलब्ध संसाधन" से बंधा कोड है

select() का उपयोग कर के इस व्यवहार

+0

यह उत्तर भी बहुत उपयोगी था। धन्यवाद! – giroy