Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何检索boost asio套接字文件描述符_Sockets_Boost - Fatal编程技术网

Sockets 如何检索boost asio套接字文件描述符

Sockets 如何检索boost asio套接字文件描述符,sockets,boost,Sockets,Boost,我正在使用BoostASIO开发一个tcp服务器进程,用于侦听客户端连接。客户端应发送部分数据包。服务器进程只有从客户端接收到整个数据包(页眉、数据和页脚),才能处理该数据包 为了处理部分数据包,服务器进程需要将数据包(或部分数据包)从每个客户端连接推送到队列。服务器将为每个客户端连接维护一个队列 现在我的问题是如何在使用boost asio时获取套接字文件描述符。我计划使用套接字文件描述符中的整数值,并创建一个std::map容器来处理每个客户端连接的队列 std::map谢谢戴维。我对我的设

我正在使用BoostASIO开发一个tcp服务器进程,用于侦听客户端连接。客户端应发送部分数据包。服务器进程只有从客户端接收到整个数据包(页眉、数据和页脚),才能处理该数据包

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

现在我的问题是如何在使用boost asio时获取套接字文件描述符。我计划使用套接字文件描述符中的整数值,并创建一个std::map容器来处理每个客户端连接的队列

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();