我正在尝试实际测试我的服务器程序,所以我开发了一个使用 Asio(non-boost) 模拟大量连接的简单程序。我在 Win7 上运行它。
然而,根据https://msdn.microsoft.com/en-us//library/kdfaxaay.aspx
, C 运行时库对可以同时打开的文件数有 512 个限制。试图打开超过最大数量的文件描述符或文件流会导致程序失败。使用 _setmaxstdio 更改此数字。 并且 _setmaxstdio
在给定超过 2048 的参数时出现错误。
这是否意味着我不能使用 Asio 在 Windows 上打开超过 2048 个套接字?事实上,我尝试使用 async_connect
将超过 2048 个套接字(比如 4000)连接到服务器。并且我通过 error_code = 0 成功连接了它们。我没有遇到任何程序故障。所以有人知道这里发生了什么吗?我真的在 windows 上打开了 4000 套接字吗?
最佳答案
你的线索在这里:
The C run-time libraries have a 512 limit for the number of files that can be open at any one time.
C 运行时库 (CRT) 是为文件实现 C 标准函数的库 - fopen
等。它不处理套接字,因为它们不是标准 c 的一部分。
对于套接字,您可以使用 Windows Sockets (Winsock),这是一个不同的库。此限制不适用于它。
关于c++ - 我可以在 Windows 上使用 Asio(非增强)打开超过 2048 个套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502910/