Boost.Asio: Der Unterschied zwischen async_read und async_receive

9

Was ist der Unterschied zwischen async_read und < a href="http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/reference/basic_stream_socket/async_receive/overload2.html"> async_receive ?

    
Clark Gaebel 05.06.2010, 23:22
quelle

2 Antworten

8

async_receive ist eine Funktion, die gerade in einen Puffer eingeht, aber möglicherweise nicht den angeforderten Betrag erhält. (Es wird gleich oder weniger, nie mehr.)

async_read erhält jedoch immer den Betrag, um den Sie gebeten haben, wie folgt:

  

Diese Funktion wird verwendet, um eine bestimmte Anzahl von Datenbytes aus einem Stream asynchron zu lesen. Der Funktionsaufruf kehrt immer sofort zurück. Der asynchrone Vorgang wird fortgesetzt, bis eine der folgenden Bedingungen erfüllt ist:

     
  • Die mitgelieferten Puffer sind voll. Das heißt, die übertragenen Bytes entsprechen der Summe der Puffergrößen.
  •   
  • Ein Fehler ist aufgetreten.
  •   

Die einzige Sache, auf der die Seite etwas vage ist, ist, was async_read macht, wenn es nicht so viele Bytes bekommt, und die Verbindung schließt sich anmutig. (Zählt das als "Fehler"?) Dies kann wahrscheinlich mit einem schnellen Test festgestellt werden. ( async_receive würde Ihnen jedoch nur das geben, was es bekommen hat.)

    
Thanatos 06.06.2010, 00:26
quelle
1

Die erste ist eine freie Funktion, die zweite ist eine Elementfunktion.

Ein weiterer Unterschied ist socket_base::message_flags flags -Parameter. Mögliche Werte finden Sie beispielsweise in der recv(2) Handbuchseite.

Bearbeiten:

Mit async_receive müssen Sie überprüfen, wie viele Bytes Sie bekommen haben. Verwenden Sie es, wenn Sie mit maximal N Bytes lesen möchten, im Gegensatz zu genau N Bytes mit async_read . Entschuldigung, dachte, dass das von Boost Docs offensichtlich war.

    
Nikolai Fetissov 05.06.2010 23:55
quelle

Tags und Links