select() 在 Windows 中最多可以处理多少套接字?
What is the maximum number of sockets that select() can handle in Windows?
select()
默认可以处理 64 个套接字,我可以通过在编译时覆盖 FD_SETSIZE
常量来更改此限制。但是FD_SETSIZE
最多可以取多少?
另外,我真的应该在Windows下使用select()
,还是应该使用WSAEventSelect()
? (不确定 WSAEventSelect()
是否允许超过 64 个套接字)。
套接字的最大数量取决于底层 WinSock 服务提供商(WinSock 本身只是接口包装器)。参见 https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169(v=vs.85).aspx
WSAEventSelect() 比 select() 有一些额外的功能,但是 FD_SETSIZE 由两个函数处理是一样的。
MSDN 没有具体说明 FD_SETSIZE
的上限。然而,有许多因素会影响实际限制。
并发连接限制(系统方面),一般工作站上约为1000~4000。
性能。 Windows 的 select()
实现得非常糟糕,你应该考虑使用 WSAAsyncSelect()
和超过一千个套接字的完成端口。
select()
默认可以处理 64 个套接字,我可以通过在编译时覆盖 FD_SETSIZE
常量来更改此限制。但是FD_SETSIZE
最多可以取多少?
另外,我真的应该在Windows下使用select()
,还是应该使用WSAEventSelect()
? (不确定 WSAEventSelect()
是否允许超过 64 个套接字)。
套接字的最大数量取决于底层 WinSock 服务提供商(WinSock 本身只是接口包装器)。参见 https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169(v=vs.85).aspx
WSAEventSelect() 比 select() 有一些额外的功能,但是 FD_SETSIZE 由两个函数处理是一样的。
MSDN 没有具体说明 FD_SETSIZE
的上限。然而,有许多因素会影响实际限制。
并发连接限制(系统方面),一般工作站上约为1000~4000。
性能。 Windows 的
select()
实现得非常糟糕,你应该考虑使用WSAAsyncSelect()
和超过一千个套接字的完成端口。