c++ - 我可以在 Windows 上使用 Asio(非增强)打开超过 2048 个套接字吗?

标签 c++ networking asio

我正在尝试实际测试我的服务器程序,所以我开发了一个使用 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/

相关文章:

c++ - 无序映射相等功能 c++

networking - 如何将通过网络接收到的 byte slice 转换为结构

c# - 如何使用C#在Windows中检测范围内的蓝牙激活的笔记本电脑

c++ - 根据 boost 1.68 的文档,旧的 io_context::post 已被弃用。推荐使用 boost::asio::post() 。谁能给我举个例子吗?

c++ - 如何在 Boost Asio 上组合链包装器和优先包装器

boost - 如何为 Boost ASIO TCP 套接字设置 TCP_QUICKACK

c++ - Visual Studio C/C++ 是否支持自动软件预取?

c++ - 自定义强制转换不适用于派生类的引用

networking - windows xp中如何通过命令获取特定适配器的ip地址

c++ - 无法从QTreeView连接信号/插槽