据我所知,当我创建新套接字时,没有什么能阻止linux为描述符分配范围0 ... 2 ^ 32中的任何随机数。 但现实是什么?在我的应用程序(Web服务器)中,我需要一个映射结构,将描述符映射到"连接结构"。我知道某种RB-Tree(int - > connection_ptr *)可以工作,但是connection_ptr指针的线性数组(其中每个指针放置在offset(index)=描述符值)会快一点。
答案 0 :(得分:4)
始终从最低可用编号分配文件描述符。这是由POSIX保证的。
答案 1 :(得分:1)
即使以这种方式实施,如果您关心可移植性和可靠性,也不能依赖它。
要获得几乎恒定的访问复杂性,您可以使用散列容器,例如std:unordered_map
。您甚至可以编写自定义哈希,因此存储将针对文件描述符编号分发进行优化。
struct SocketHasher {
size_t operator()(uint32_t key) {
return key & 0xFFFF;
}
}
std::unordered_map<uint32_t, connection_ptr, SocketHasher> connectionPool;