我正在编写一个Linux多用户服务器,并且每个接受的连接都返回一个int
,其中包含该连接的套接字文件描述符。我还有一个与每个连接对应的UserConnection
对象。我使用哈希表(C ++ STL unordered_map<int, UserConnection>
)来存储套接字文件描述符(键)和UserConnection
对象(值)的键值对。
将套接字文件描述符作为密钥放在哈希表中是否安全? Linux的套接字号分配中是否有任何模式可能不适用于散列函数?
答案 0 :(得分:3)
manual page for open(2)明确指出最低的未使用文件描述符被分配给新文件描述符:
成功调用返回的文件描述符将是 最低编号的文件描述符当前未为该进程打开。
socket(2)
似乎缺少类似的措辞,但我认为这是一个相当安全的假设 - 同样适用于套接字。
接下来,创建套接字将导致单个增加的文件描述符,对于新的套接字,将在第一次机会时重用。因此,这是散列的理想用例。