💡
原文中文,约2900字,阅读约需7分钟。
📝
内容提要
在 Linux/Unix 中,套接字使用文件描述符,而在 Win32 中则使用 SOCKET 类型。虽然 SOCKET 是指针,但可以安全地转换为 int 类型,因为它实际上是一个表格索引,每个进程的句柄数量有限。许多开源项目(如 OpenSSL)也采用这种方式。通过程序验证,创建和释放套接字时,索引是连续的。
🎯
关键要点
-
在 Linux/Unix 中,套接字使用文件描述符 fd,类型为 int。
-
在 Win32 中,套接字使用 SOCKET 类型,定义为 UINT_PTR,是一个指针。
-
SOCKET 可以安全地转换为 int 类型,因为它实际上是一个表格索引。
-
每个进程的句柄数量有限,最多为 2^24 个。
-
每个 SOCKET 背后都是一个指向 Kernel Object 的 Handle,Handle Table 是连续的。
-
许多开源项目(如 OpenSSL)在 Windows 环境下将 SOCKET 类型直接用 int 存储。
-
程序验证显示,创建和释放套接字时,索引是连续的,且释放的项目会被复用。
➡️