2012-11-29 10 views
6

मैंने पढ़ा है कि विभिन्न धागे से सॉकेट पर एकाधिक संचालन की अनुशंसा नहीं की जाती है। लेकिन क्या होगा यदि मैं एक ही थ्रेड socket.async_read और अगली socket.async_write से कॉल करता हूं (पिछले के समाप्त होने की प्रतीक्षा किए बिना)? क्या मैं निष्पादित कर सकता हूं कि इस ऑपरेशन में से कोई एक पूरा होने पर उचित कॉलबैक चलाया जाएगा?Boost.asio: क्या मैं एक थ्रेड से एक साथ async_read और async_write कर सकता हूं?

+0

क्या आप टीसीपी सॉकेट के बारे में पूछ रहे हैं? –

उत्तर

11

मुझे पता चला है कि हाँ, आप एक ही समस्या के बिना एक ही सॉकेट पर async_read और एक लंबित async_write लंबित हो सकते हैं। जब आप io_service::run() विधि को कॉल करते हैं, तो कॉलबैक अपेक्षित के रूप में पूरा हो जाएगा।

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

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