Linux套接字文件描述符通常适用于散列

时间:2017-02-28 21:45:59

标签: c++ linux sockets hash

我正在编写一个Linux多用户服务器,并且每个接受的连接都返回一个int,其中包含该连接的套接字文件描述符。我还有一个与每个连接对应的UserConnection对象。我使用哈希表(C ++ STL unordered_map<int, UserConnection>)来存储套接字文件描述符(键)和UserConnection对象(值)的键值对。

将套接字文件描述符作为密钥放在哈希表中是否安全? Linux的套接字号分配中是否有任何模式可能不适用于散列函数?

1 个答案:

答案 0 :(得分:3)

manual page for open(2)明确指出最低的未使用文件描述符被分配给新文件描述符:

  

成功调用返回的文件描述符将是   最低编号的文件描述符当前未为该进程打开。

socket(2)似乎缺少类似的措辞,但我认为这是一个相当安全的假设 - 同样适用于套接字。

接下来,创建套接字将导致单个增加的文件描述符,对于新的套接字,将在第一次机会时重用。因此,这是散列的理想用例。