7

私はboostasioを使用して、クライアント接続をリッスンするtcpサーバープロセスを開発しています。クライアントは部分的なパケットを送信することが期待されています。サーバープロセスは、クライアントからパケット全体(ヘッダー、データ、およびフッター)を受信するまで、パケットを処理できません。

部分的なパケットを処理するために、サーバープロセスは各クライアント接続からキューにパケット(または部分的なパケット)をプッシュする必要があります。サーバーは、クライアント接続ごとにキューを維持します。

ここで私の質問は、boostasioを使用するときにソケットファイル記述子を取得する方法です。ソケットファイル記述子の整数値を使用して、クライアント接続ごとにキューを処理するstd::mapコンテナーを作成することを計画しています。

std :: map <int、std :: deque <std :: string>

ソケットファイル記述子を取得することが不可能な場合、最適なパフォーマンスのための代替手段は何でしょうか。使用する必要がありますか

std :: map <tcp :: socket *、std :: deque <std :: string >>?

前もって感謝します。

4

2 に答える 2

23

ソケットクラスによって継承されるメンバー関数がありbasic_socket::native_handle()ますが、@Davidの答えを実際に検討する必要があります。

于 2012-08-15T14:37:25.273 に答える
1

さまざまな受信関数を呼び出すときは、その接続に関連付けられている構造体へのポインター(または共有ポインター)を渡します。ソケット記述子に触れる必要がないため、ソケット記述子からのマップは必要ありません。

このような:

boost::asio::async_read(socket, boost::asio::buffer(buf),
    boost::bind(&MyConnection::doRead, this, boost::asio::placeholders::error));


void MyConnection::doRead(const boost::system::error_code& error)
{
 // Here, we are in the object associated with this connection
于 2012-08-14T22:00:18.600 に答える