2012-05-10 11 views
6

मुझे कुछ कोड मिला है जो समय-समय पर recv() पर कॉल करता है (MSG_DONTWAIT ध्वज के साथ)। मैं उत्सुक हूं क्योंकि vtune में मेरा कोड प्रोफाइलिंग, मुझे recv() से जुड़े कॉल दिखाई देता है, और यह निष्पादित करने के लिए कुल समय का एक बड़ा हिस्सा ले रहा है। मुझे उत्सुकता है कि recv()sigprocmask() पर कॉल कर रहा है।रीग सिस्टम कॉल को कॉल करते समय सिगप्रोकमास्क क्यों बुलाया जाता है?

+0

क्या हम इस व्यवहार को पुन: उत्पन्न करने वाले सबसे छोटे संभव कोड का प्रासंगिक पता देख सकते हैं? क्या हम डेमो कोड भी देख सकते हैं? सिग्नल मास्क पर क्या किया जा रहा है यह देखने के लिए यह रोशनी होगी। – pilcrow

+0

क्या आप उन रिकॉर्ड्स के संदर्भ में 'recv() 'पर विस्तृत कर सकते हैं? आप किस प्रकार की सॉकेट का उपयोग कर रहे हैं? क्या आप सीधे 'recv() 'कॉल कर रहे हैं? – alk

उत्तर

0

शायद इसलिए रिकॉर्ड्स बता सकता है कि प्रासंगिक सिग्नल जेनरेट किए गए हैं या नहीं, अन्यथा नहीं देखा जाएगा अगर सिग्नल अवरुद्ध किए गए थे। EAGAIN/EWOULDBLOCK को इरनो के मानों के रूप में दिमाग में आना चाहिए जो कभी-कभी संकेतों का उपयोग करके उत्पन्न होते हैं जिन्हें संभवतः अवरुद्ध किया जा सकता है। क्या आपने sigprocmask man page देखा था?

+1

EAGAIN एक त्रुटि कोड है, सिग्नल नहीं। – pilcrow

+0

ब्रेनफार्ट, मुझे त्रुटियों का मतलब था। धन्यवाद। त्रुटि कभी-कभी संभाल संकेतों के आधार पर उत्पन्न होती है। – JimR

1

लिनक्स के तहत टीसीपी सॉकेट के साथ काम करते समय, यदि आप दूसरी तरफ अप्रत्याशित रूप से बंद हो जाते हैं तो आपको सिगिपिप प्राप्त होगा।

आप इस संकेत (ज्यादातर समय, आप 0 खुद के रिटर्न मान संभाल लेंगे, तो आप इस संकेत के बारे में परवाह नहीं है) मुखौटा कर सकते हैं, मुझे लगता है किसंकेत राज्य के लिए प्रणाली पुस्तकालय चेक, और यदि मुखौटा है, तो एक तेज कोड पथ का उपयोग करें।

यदि नहीं, तो यह अनुकूलित नहीं हो सकता है।

बीटीडब्ल्यू, आप सही चयन() सही के बारे में जानते हैं?

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