select()可以在Windows中处理的套接字的最大数量是多less?

select()可以默认处理64个套接字,我可以通过在编译时重写FD_SETSIZE常量来改变这个限制。 但是FD_SETSIZE可以使用的最大数量是多less?

也应该真的使用select()Windows下,或者我应该使用WSAEventSelect() ? (不知道WSAEventSelect()允许超过64个套接字)。

MSDN没有具体的FD_SETSIZE的上限。 但是有多少因素影响了实际的限制。

  1. 并行连接限制(system-wise),一般工作站上约1000〜4000。

  2. 性能。 Windows的select()实现得非常糟糕,您应该考虑使用WSAAsyncSelect()和超过一千个套接字的完成端口。

  1. 最大数量的套接字取决于底层的WinSock服务提供者(WinSock本身就是接口封装)。 请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169(v=vs.85).aspx

  2. WSAEventSelect()在select()上有一些额外的功能,但FD_SETSIZE由两个函数处理相同。