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 ?
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.)
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.
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.