2011-06-05 12 views
13

मैं Tutorial on Network Programming with Python पढ़ रहा हूं, और इस दस्तावेज़ में लेखक कह रहे हैं कि "फ़ंक्शन प्रेषण() केवल सॉकेट को अवरुद्ध करने के साथ ही उपयोग किया जाना चाहिए।"पायथन सॉकेट.sendall() फ़ंक्शन

लेकिन मुझे पायथन दस्तावेज़, socket.sendall(string[, flags]) में ऐसी कोई शर्त दिखाई नहीं दे रही है।

क्या PyNet का लेखक सही है?

उत्तर

11

संदेह में, check the source

socket_sendall स्पष्ट रूप से एक बार भेजता है() रिटर्न -1, जो यह करेगा (EAGAIN या EWOULDBLOCK की गलती के साथ) यदि आप मतदान() या चयन() को कॉल किए बिना इसे गैर-अवरुद्ध सॉकेट पर कॉल करते हैं। (और internal_select फ़ंक्शन कॉलिंग कॉल()/चयन() जब सॉकेट गैर-अवरुद्ध होता है।)

तो मैं कहूंगा कि पीईनेट लेखक सही है।

+0

ऐसा नहीं लगता है कि उस मॉड्यूल के डेवलपर से गलती की तरह लगता है कि 'EAGAIN' और' EWOULDBLOCK' को संभाला नहीं है? इन्हें शायद असाधारण परिस्थितियों, इमोहो माना जा सकता है। – PypeBros

5

sendall() गैर-अवरुद्ध सॉकेट पर समझ में नहीं आता है। इसे ब्लॉक करना होगा अगर यह एक ही समय में सभी डेटा नहीं भेज सकता है, अन्यथा इसे "प्रेषण" नहीं कहा जाएगा।

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