Sockets 如何检索boost asio套接字文件描述符
我正在使用BoostASIO开发一个tcp服务器进程,用于侦听客户端连接。客户端应发送部分数据包。服务器进程只有从客户端接收到整个数据包(页眉、数据和页脚),才能处理该数据包 为了处理部分数据包,服务器进程需要将数据包(或部分数据包)从每个客户端连接推送到队列。服务器将为每个客户端连接维护一个队列 现在我的问题是如何在使用boost asio时获取套接字文件描述符。我计划使用套接字文件描述符中的整数值,并创建一个std::map容器来处理每个客户端连接的队列 std::mapSockets 如何检索boost asio套接字文件描述符,sockets,boost,Sockets,Boost,我正在使用BoostASIO开发一个tcp服务器进程,用于侦听客户端连接。客户端应发送部分数据包。服务器进程只有从客户端接收到整个数据包(页眉、数据和页脚),才能处理该数据包 为了处理部分数据包,服务器进程需要将数据包(或部分数据包)从每个客户端连接推送到队列。服务器将为每个客户端连接维护一个队列 现在我的问题是如何在使用boost asio时获取套接字文件描述符。我计划使用套接字文件描述符中的整数值,并创建一个std::map容器来处理每个客户端连接的队列 std::map谢谢戴维。我对我的设
提前感谢。调用各种接收函数时,请传入指向与该连接关联的结构的指针(或共享指针)。不需要来自套接字描述符的映射,因为您永远不需要接触套接字描述符 像这样:
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
有Socket类继承的成员函数,但您应该真正考虑@戴维的回答。< /P>谢谢戴维。我对我的设计做了一些修改,在与每个客户端连接关联的对象中维护队列。感谢您实际回答这个问题,而不是说“不要那样做”仅仅因为OP给出的需要该功能的特殊理由是不必要的,并不意味着他所要求的信息永远是无用的。[仅供参考:我将句柄#包含在日志消息中,它在诊断问题时被证明是有用的。]有时您需要套接字文件描述符,例如,如果它在另一个要重复使用的代码库中使用。底层类型是asio::detail::socket_type fd=socket.native_handle();