2010-05-18 18 views
7

मैं बी से मूल्य प्राप्त करने के लिए ए की तरह किसी अन्य प्रक्रिया से मूल्य प्राप्त करने के लिए डोमेन सॉकेट का उपयोग कर रहा हूं, यह महीनों के लिए अच्छी तरह से काम करता है। लेकिन हाल ही में, बी को "प्रेषण" संदेश के दौरान "त्रुटि 111, कनेक्शन अस्वीकार" के साथ असफल रहा है।डोमेन सॉकेट "sendto" मुठभेड़ "errno 111, कनेक्शन से इनकार कर दिया"

मैंने बी डोमेन सॉकेट बाइंड फ़ाइल की जांच की है, यह मौजूद है। मैं एक और मशीन में कुछ परीक्षण भी करता हूं, यह भी अच्छी तरह से काम करता है। तो, क्या किसी को इससे पहले इस समस्या का सामना करना पड़ता है? क्या किसी के पास कुछ सुराग हो सकते हैं जो इस परिदृश्य में शायद गलत हो सकता है? बहुत बहुत धन्यवाद।

उत्तर

3

जब मैंने यूनिक्स डोमेन सॉकेट के साथ यह त्रुटि देखी है, तो आमतौर पर यह प्रक्रिया बी चल रही नहीं है, या कनेक्शन पथ में कोई मेल नहीं है। (यदि बी मर जाता है, तो क्या यह स्वचालित रूप से पुनरारंभ होता है? क्या यह संभव है कि असफलता हो रही है जबकि बी की मृत्यु हो गई है लेकिन अभी तक पुनरारंभ नहीं हुई है?)। एक और संभावना: क्या यह संभव है कि एक ही समय में ए की कई प्रतियां चल रही हों? यदि आप अभी तक स्वीकृत कनेक्शन की बी की कतार पूर्ण नहीं है तो आपको ECONNREFUSED त्रुटि मिल सकती है।

मैं strace के तहत दोनों प्रक्रियाओं ए और बी चल सुझाव है, या तो:

strace -o A.log A 

या, यदि प्रक्रिया पहले से ही चल रहा है,

strace -o B.log -p <process-id-of-B> 

इसके अलावा,

netstat -na 

आपको सिस्टम में मौजूद सभी यूनिक्स डोमेन सॉकेट की स्थिति देगा।

+0

'netstat -nap' (जब रूट के रूप में चलाया जाता है) उन सॉकेट से जुड़ी प्रक्रियाओं को भी दिखाएगा। – bstpierre

1

ध्यान रखें कि फाइल सिस्टम में सॉकेट स्वचालित रूप से हटाए नहीं जाते हैं जब उनके लिए अंतिम वर्णनकर्ता बंद हो जाता है। उस समय कनेक्ट या भेजने की कोशिश कर त्रुटियों का कारण बन जाएगा। फ़ाइल को सिस्टम सिस्टम में सॉकेट को फिर से बांधने से पहले उसे हटाने की आवश्यकता होगी।

2

के अंतर्गत देखने पर विचार करें और देखें कि बी फ़ाइल डिस्क्रिप्टर से बाहर चल रहा है या नहीं। यदि ऐसा है, तो आपके पास संसाधन रिसाव है और इसे साफ़ करने की आवश्यकता है। यह यूडीपी कार्यक्रमों में कोई समस्या नहीं होनी चाहिए, लेकिन मजेदार चीजें ज्ञात हैं। lsof उपयोग करने के लिए एक और उपकरण हो सकता है।

अन्यथा, आपके पास अन्य लोगों से उचित सुझाव हैं - netstat विशेष रूप से सहायता करनी चाहिए।

0

प्रक्रिया बी अपने (संभवतः DGRAM) सॉकेट के दूसरे पक्ष पर नहीं रह गया है - शायद यह मर गया, या filehandle बंद कर दिया, आदि

linux एक SOCK_DGRAM या SOCK_SEQPACKET यूनिक्स डोमेन के लिए ECONNREFUSED वापस आ जाएगी पर sendto(2) सॉकेट अगर प्राप्त अंत मर चुका है। (SOCK_STREAM यूनिक्स सॉकेट यह नहीं करेंगे - वे इसके बजाय ENOTCONN लौटाएंगे।)

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