यह Is a successful send() "atomic"? पर एक फॉलोअप प्रश्न है, क्योंकि मुझे लगता है कि यह वास्तव में सामान्य रूप से सिस्टम कॉल से संबंधित है, न केवल सॉकेट पर भेजता है।सिस्टम कॉल कब और कैसे बाधित होते हैं?
कौन सी सिस्टम कॉल बाधित हो सकती है, और जब वे हैं, तो बाधा कहां है? मैंने SA_RESTART के बारे में सीखा है, लेकिन यह बिल्कुल समझ में नहीं आता कि क्या हो रहा है।
अगर मैं SA_RESTART बिना एक प्रणाली कॉल करते हैं, कॉल बीच में आता है किसी भी तरह का द्वारा बाधित किया जा सकता है (जैसे उपयोगकर्ता इनपुट) है कि अपने आवेदन चिंता का विषय नहीं है, लेकिन ओएस की आवश्यकता होती है मेरी कॉल गर्भपात और कुछ करने के लिए अन्य? या क्या यह सिग्नल द्वारा केवल बाधित है जो सीधे मेरी प्रक्रिया (CTRL + C, सॉकेट बंद, ...) से संबंधित है?
SA_RESTART सेट करते समय, प्रेषण() या किसी अन्य "धीमी" syscall के अर्थशास्त्र क्या हैं? क्या यह हमेशा तब तक अवरुद्ध होगा जब तक कि मेरा सभी डेटा प्रसारित नहीं हो जाता है या सॉकेट डाउन हो जाता है, या यह भेजने() के पैरामीटर में गिनती से छोटी संख्या के साथ वापस आ सकता है?
पुनरारंभ करना पुनरारंभ करना कहां है? क्या ओएस जानता है कि मैं किसी भी इंटरप्ट पर कॉल को पुनरारंभ करना चाहता हूं, या कुछ सिग्नल मेरी प्रक्रिया में भेजा गया है और फिर लाइब्रेरी कोड द्वारा संभाला गया है? या मुझे इसे खुद करना है, उदा। थोड़ी देर में कॉल को लपेटें और जितनी बार आवश्यक हो पुनः प्रयास करें?
इसका मतलब केवल मेरी प्रक्रिया में भेजे गए संकेत हैं, है ना? मैंने किसी भी तरह से माना कि मेरे इंटरप्ट (एक कुंजी प्रेस, माउस चाल, टाइमर इंटरप्ट, ...) को संभालने वाले कर्नेल का कोई भी बाधा मेरे कॉल को वापस करने और सिग्नल भेजने के लिए कारण बन जाएगा। सिस्टम कॉल के दौरान एक संदर्भ स्विच समय के अलावा किसी भी तरह से मेरी प्रक्रिया में हस्तक्षेप नहीं करना चाहिए, है ना? – lxgr
@lxgr, यह सही है, संदर्भ स्विचिंग सिस्टम कॉल को रोक नहीं देती है। –