我知道没有什么可以阻止linux在创建新套接字时为描述符分配0 ... 2 ^ 32范围内的任何随机数的。 但是现实是什么? 在我的应用程序(Web服务器)中,我需要一个将描述符映射到“连接结构”的映射结构。我知道某种RB-Tree(int-> connection_ptr *)可以工作,但是connection_ptr指针的线性数组(每个指针位于偏移量(索引)=描述符值处)会更快一些。
最佳答案
即使以这种方式实现,如果您关心可移植性和可靠性,也不能依靠它。
要获得几乎恒定的访问复杂性,可以使用诸如 std:unordered_map
之类的哈希容器。您甚至可以编写自定义散列器,因此将针对文件描述符号分配优化存储。
struct SocketHasher {
size_t operator()(uint32_t key) {
return key & 0xFFFF;
}
}
std::unordered_map<uint32_t, connection_ptr, SocketHasher> connectionPool;
关于c++ - 是否可以保证linux/freebsd中的套接字描述符具有几乎连续的或可比较的数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24279402/