linux/freebsd中的套接字描述符是否保证具有几乎连续的或可比较的数字?
Is it guaranteed that socket descriptors in linux/freebsd will have almost sequential or comparable numbers?
我明白没有什么可以阻止linux分配描述符在0范围内的任何随机数…2^32当我创建新的套接字。但现实是什么?在我的应用程序(web服务器)中,我需要一个映射结构,将描述符映射到"连接结构"。我知道某种RB-Tree (int -> connection_ptr*)将工作,但connection_ptr指针的线性数组(其中每个指针放置在偏移(索引)=描述符值)会快一点。
文件描述符总是从最低可用数分配。这是POSIX保证的。
即使它是这样实现的,如果你关心可移植性和可靠性,你也不能依赖它。
要获得几乎恒定的访问复杂度,您可以使用散列容器,如std:unordered_map
。您甚至可以编写自定义散列器,这样存储将针对文件描述符编号分布进行优化。
struct SocketHasher {
size_t operator()(uint32_t key) {
return key & 0xFFFF;
}
}
std::unordered_map<uint32_t, connection_ptr, SocketHasher> connectionPool;
相关文章:
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 如何在 c++ 中检查连续片段中数字被 11 整除
- C++ 如何找出数组中最多的连续数字?
- 如何制作 arduino 串行循环(连续接收数字)
- 在随机生成的数组中查找重复的连续数字
- 子数组中两个数字的相同出现(连续)
- 在向量中找到连续数字的更有效方法
- 连续两次写入数字时出现逻辑错误 (C++)
- 不理解连续数字之间的空格代码
- 我如何限制我连续拥有的数字数量
- 给定n个数字,编写一个例程,以在4个连续数字之间找到最大的数字
- 从输入中找到连续十六进制数字的最大数量
- 在序列中查找相似的数字并记录最大连续连胜
- 如何生成没有两个相邻连续数字的排列
- 随机顺序的连续数字
- 返回连续数字的逻辑假设数组包含元素 1,9,2,3,4,9,6,7,8,那么它应该返回 2,3,4,6,7,8
- 非连续内部数字表示上的位移位
- 如何找到序列中的连续数字
- 连续获取 2 个唯一数字
- 在一个有连续数字的向量中找到一个数字