लिनक्स पर अवरुद्ध सॉकेट का उपयोग करते समय, send()
के लिए अनुरोध किया गया था, अन्य बाधित से कम लौटने के लिए कोई कारण नहीं है, लेकिन आंशिक रूप से सफल send()
syscall?कब() लम्बाई तर्क से कम लौटाएगा?
मुझे पता है कि यह संभवतः बहुत ही कार्यान्वयन परिभाषित है, और यह कि किसी भी स्थापित सिग्नल हैंडलर (और इस प्रकार बाधित सिस्को के कारणों) के बिना भी उस व्यवहार पर भरोसा करना बहुत खतरनाक होगा। मैं पूरा होने तक प्रेषण कॉल के चारों ओर लूप होगा; हालांकि, अगर इस मामले पर कोई आधिकारिक शब्द था, तो मैं इससे बचने में सक्षम होगा।
Why is it assumed that send may return with less than requested data transmitted on a blocking socket? अनिर्णायक परिणाम के साथ एक ही सवाल पूछने, था: बाधित syscalls एक छोटी वापसी की गिनती के लिए एक उदाहरण के रूप में उल्लेख किया जाता है, लेकिन यह अभी भी है कि क्या एक पूर्ण टीसीपी भेजने बफर एक आंशिक भेजने का कारण होता है स्पष्ट नहीं है या send()
बस जब तक को ब्लॉक कर देगा बफर में पर्याप्त जगह है।
FWIW, मेरे लिनक्स बॉक्स पर 'send()' के लिए मैन पेज का कहना है, 'जब संदेश सॉकेट के प्रेषण बफर में फिट नहीं होता है, तो सामान्य रूप से ब्लॉक भेजता है, जब तक सॉकेट को अनब्लॉकिंग में नहीं रखा जाता है I/हे मोड नॉनब्लॉकिंग मोड में यह इस मामले में EAGAIN या EWOULDBLOCK त्रुटि के साथ विफल हो जाएगा। 'ऐसा लगता है कि फ़ंक्शन को इसके' लेन 'तर्क (या त्रुटि पर '-1') के अलावा कुछ भी लौटने के रूप में प्रतीत नहीं होता है। –
लिनक्स मैन पेज कुख्यात अस्पष्ट हैं। आप बीएसडी सिस्टम पर पेज की जांच करने से काफी बेहतर हैं। रिटर्न वॉल्यूम अनुभाग दस्तावेज है कि यह केवल गारंटी के बिना भेजे गए अक्षरों की संख्या देता है कि यह अनुरोध की गई संख्या के समान है। –