2

を使用して TCP サーバーを作成していますBoost::Asio。各クライアントのパケット時間を追跡する必要があります。IO 操作が完了すると、 から返された完了キーを使用して各クライアントを簡単に識別できますGetQueuedCompletionStatus。でこれを行う方法が見つかりませんBoost::Asio

これをどのように実装できますか、または代替手段はありますか?

4

1 に答える 1

3

あなたの質問を正しく理解しているかどうかわかりません: asio async tcp server exampleのセッションクラスなどのクラスにすべてのクライアント関連の状態 (ソケット、アドレスなど) を保存することの何が問題になっていますか? async::write次に、たとえば、操作を呼び出すときにタイマーを開始できます

boost::asio::async_write(socket_,
      boost::asio::buffer(data_, bytes_transferred),
      boost::bind(&session::handle_write, this,
        boost::asio::placeholders::error));

handle_write書き込みが完了すると asio によって呼び出される書き込み完了ハンドラーでタイマーを停止します。

void handle_write(const boost::system::error_code& error)

または、簡単にboost::bindを使用して状態を維持できます。たとえば、非同期書き込み操作を呼び出す場合、通常はhandle_writeいくつかの追加パラメーターと同様の署名を持つハンドラーを指定し、追加パラメーターを呼び出しにバインドします。

これで質問の答えが得られない場合は、質問にさらに説明を追加してください。

于 2011-12-01T19:43:59.353 に答える