2010-02-10 6 views
26

क्या बीच का अंतर है:asio :: tcp :: सॉकेट के async_read_some और async_receive के बीच क्या अंतर है?

  • boost::asio::tcp::socket::async_read_some()
  • boost::asio::tcp::socket::async_receive()

जहां तक ​​मेरा अपनी दस्तावेज़ीकरण बता सकते हैं समान है।

मुझे कौन सा प्राथमिकता देना चाहिए?

उत्तर

17

networking TR2 proposal (5.7.10.2 basic_stream_socket सदस्य) में उनके विनिर्देश भी समान होता है:

async_receive पर:

प्रभाव: कॉल इस-> service.async_receive (इस-> कार्यान्वयन, बफ़र्स, 0, हैंडलर)।

async_read_some पर:

प्रभाव: इस-> service.async_receive (इस-> कार्यान्वयन, बफ़र्स, 0, हैंडलर) कॉल करता है।

तो मैं इस जैरी धारणा की पुष्टि करता है लगता है। दो लिंक के साथ

+0

जैरी का जवाब बेहतर है। कुछ कारण बताता है 'ऐसा क्यों हो सकता है। – unixman83

22

मेरा मानना ​​है कि दोनों अनिवार्य रूप से समान हैं। दोनों कारण प्रदान करते हैं कि वे दोनों iostreams (जैसे read_some सदस्य) और सॉकेट (receive है) के समान इंटरफेस प्रदान करना है।

पीटर त्सेंग ने कहा, async_receive भी एक अधिभार कि socket_base::message_flags स्वीकार करता है, जो async_read_some नहीं है।

+1

मुझे समझ में आता है। तो मुझे लगता है कि उसे उस इंटरफ़ेस से मेल खाने वाले "पसंद" करना चाहिए, जिसके साथ वह अनुकूलता बनाए रखेगा। –

+0

async_receive स्वीकार्य socket_base :: message_flags –

+0

@ पीटर टेंग का जिक्र करने योग्य है: यही कारण है कि मैंने एड्रीन क्लर्क के उत्तर को स्पष्ट रूप से वोट दिया (स्पष्ट रूप से, आपका संपादन) ... :-) –

2

अनुरुप हर कोई यहाँ:

  1. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L558
  2. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L834

कोड बिल्कुल वैसा ही है। हालांकि async_receive में message_flags के साथ एक अधिभार है, जो विशेष रूप से आपको asio::socket_base::message_peek निर्दिष्ट करने की अनुमति देता है।