2016-03-20 3 views
0

Boost.Asio: Beenden mehrere async_recv_until() -Aufrufe und haben ihre Callbacks in der Reihenfolge des Methodenaufrufs?Boost.Asio: Beenden mehrere async_recv_until() Aufrufe und haben ihre Callbacks in der Reihenfolge des Methodenaufrufs?

Ich habe ein Programm, das zwei async_recv_until() Aufrufe machen konnte, bevor der Server antworten wird.

Es ist jedoch entscheidend, dass der erste Anruf async_recv_until() diese Antwort erhält. Gibt es eine Möglichkeit, dies sicherzustellen?

+0

Wenn beide Aufrufe für denselben Socket gelten, werden die Callbacks in der gebuchten Reihenfolge ausgeführt (es sei denn, ein zugrunde liegender Fehler führt dazu, dass ein Callback früher ausgeführt wird). Einen Status zu haben, der von der Reihenfolge dieser Aufrufe abhängt, scheint jedoch eine fehlerhafte Designentscheidung zu sein. – Chad

+0

Danke. Woher weißt du das? – Shuzheng

Antwort

0

Scheint, Sie haben Tippfehler: Es gibt keine async_recv* Operationen in Asio API. Es gibt async_read* und async_receive, was ein etwas anderes Verhalten ist.

Sie können keine async_read* Operationen auf demselben Socket in die Warteschlange stellen (aber Sie können sie auf verschiedenen Sockets ausführen, jeweils einzeln für jeden Socket). Von async_read docs:

Das Programm muss sicherstellen, dass der Strom nicht andere (wie async_read, die async_read_some Funktion des Stroms, oder andere zusammengesetzte Operationen, die auszuführen liest) gelesen führt, bis dieser Vorgang abgeschlossen ist.

Die Antwort lautet also: Sie sollten Ihre zweite async_read_until erst nach dem ersten (nach dem Rückruf) ausführen.

Verwandte Themen