我正在使用boost asio来开发一个侦听客户端连接的tcp服务器进程.期望客户端发送部分数据包.服务器进程在收到来自客户端的整个数据包(标头,数据和页脚)之前无法处理数据包. 为了处理
为了处理部分数据包,服务器进程需要将数据包(或部分数据包)从每个客户端连接推送到队列.服务器将维护每个客户端连接的队列.
现在我的问题是如何在使用boost asio时获取套接字文件描述符.我打算使用套接字文件描述符中的整数值,并创建一个std :: map容器来处理每个客户端连接的队列.
std::map< int, std::deque< std::string >
如果检索套接字文件描述符不可行,那么可能是最佳性能的替代方案.我需要使用吗?
std::map< tcp::socket *,std::deque< std::string> > ?
提前致谢.
调用各种接收函数时,将指针(或共享指针)传递给与该连接关联的结构.从套接字描述符中不需要映射,因为您永远不需要触及套接字描述符.像这样:
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