WinSock 的 select 如何超过 64 个套接字限制?(三种方法)
💡
原文中文,约8500字,阅读约需21分钟。
📝
内容提要
在Windows中,select函数的FD_SETSIZE限制为64,影响高并发服务器性能。可以通过重定义FD_SETSIZE、自定义fd_set结构体或使用iocp实现epoll来突破这一限制。自定义fd_set方法更具通用性,适用于多平台。wepoll项目提供高性能的epoll接口,支持Windows Vista及以上系统。
🎯
关键要点
- Windows中的select函数的FD_SETSIZE限制为64,影响高并发服务器性能。
- 可以通过重定义FD_SETSIZE、自定义fd_set结构体或使用iocp实现epoll来突破这一限制。
- 重定义FD_SETSIZE的方法存在内存浪费和可移植性差的问题。
- 自定义fd_set结构体的方法更为通用,适用于多平台。
- 使用动态结构模拟fd_set可以突破FD_SETSIZE的限制,并在Windows下正常工作。
- 错误的选择包括WSAEventSelect和WSAAsyncSelect,这些方法仍然受到数量限制。
- 可以使用iocp实现epoll,wepoll项目提供高性能的epoll接口,支持Windows Vista及以上系统。
- 在跨平台的poll模块中,推荐使用自定义fd_set作为保底方案,并在支持的系统中使用wepoll进行增强。
🏷️