7

我正在使用 boost asio 开发一个侦听客户端连接的 tcp 服务器进程。客户端应该发送部分数据包。服务器进程在从客户端接收到整个数据包(页眉、数据和页脚)之前无法处理数据包。

为了处理部分数据包,服务器进程需要将来自每个客户端连接的数据包(或部分数据包)推送到队列中。服务器将为每个客户端连接维护一个队列。

现在我的问题是如何在使用 boost asio 时获取套接字文件描述符。我打算使用套接字文件描述符中的整数值并创建一个 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 回答