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

时间:2015-02-20 09:17:42

标签: c++ windows sockets

默认情况下,

select()可以处理64个套接字,我可以通过在编译时覆盖FD_SETSIZE常量来更改此限制。但是FD_SETSIZE可以采取的最大数量是多少?

我是否应该在Windows下使用select(),还是应该使用WSAEventSelect()? (不确定WSAEventSelect()是否允许超过64个套接字)。

2 个答案:

答案 0 :(得分:4)

MSDN没有具体说明FD_SETSIZE的上限。但是有很多因素会影响实际限制。

  1. 并发连接限制(系统级),一般工作站大约1000~4000。

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

答案 1 :(得分:0)

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

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