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进行增强。