2016-03-20 8 views
0

Boost.Asio:いくつかのasync_recv_until()呼び出しが終了し、メソッド呼び出しの順番でコールバックを持っていますか?Boost.Asio:いくつかのasync_recv_until()呼び出しが終了し、メソッド呼び出しの順番でコールバックを持っていますか?

私はサーバが応答する前に2つのasync_recv_until()コールを行うプログラムがあります。

ただし、最初の呼び出しであるasync_recv_until()がこの返事を受け取ることが重要です。これを確実にする方法はありますか?

+0

両方の呼び出しが同じソケットに対して行われている場合、コールバックは(基本的なエラーによってコールバックが早期に発生しない限り)ポストされた順序で行われます。これらの呼び出しの順序に依存する状態を持つことは、欠陥のある設計上の決定のようです。 – Chad

+0

ありがとうございます。どのようにこれを知っていますか? – Shuzheng

答えて

0

あなたは入力ミスがあります:asio apiにはasync_recv*操作がありません。 async_read*async_receiveがありますが、動作が少し異なります。

async_read*操作を同じソケットにキューできません(ただし、異なるソケットで実行できますが、ソケットごとに1つずつアクティブにすることができます)。 async_read docsからこの 操作が完了するまで

プログラムストリームは(例えばasync_read、ストリームのasync_read_some機能、 又は読み出し実行する任意の他の合成操作など)は、他の読み取り 操作を実行しないことを保証しなければなりません。

したがって、最初の終了後(コールバックが呼び出された後)に初めてasync_read_untilを実行する必要があります。

関連する問題