加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows限制每台机器同时打开的插槽/连接数

发布时间:2020-12-14 05:31:31 所属栏目:Windows 来源:网络整理
导读:假设我的 Windows 7具有一个真实的网络接口和很少的环回接口. 我有启用IOCP的服务器,它接受来自客户端的连接. 我正在尝试尽可能多地模拟与服务器的真实客户端连接. 我的客户端代码只是建立了X个套接字连接 (请注意,客户端绑定到给定的接口): const Int32 re
假设我的 Windows 7具有一个真实的网络接口和很少的环回接口.
我有启用IOCP的服务器,它接受来自客户端的连接.
我正在尝试尽可能多地模拟与服务器的真实客户端连接.

我的客户端代码只是建立了X个套接字连接
(请注意,客户端绑定到给定的接口):

const Int32 remotePort = 12345;
        const Int32 MaxSockets = 60000;

        Socket[] s = new Socket[MaxSockets];
        IPEndPoint bindEndpoint = new IPEndPoint(IPAddress.Parse(args[0]),0);
        for (Int32 i = 0; i < MaxSockets; i++)
        {
            s[i] = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            s[i].SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
            s[i].Bind(bindEndpoint);
            s[i].Connect(args[1],remotePort);

            IPEndPoint socketInfo = (IPEndPoint)s[i].LocalEndPoint;
            Console.WriteLine(String.Format("Connected socket {0} {1} : {2}",i,socketInfo.Address,socketInfo.Port));
        }

在环回接口上,我有几个用于绑定的IP.
另外,我还使用真实的界面进行绑定.
当打开的套接字数量大约为每台机器64K时,我遇到了一个问题:

未处理的异常:System.Net.Sockets.SocketException:无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或因为队列已满

我尝试了几个无助的东西,比如:
– 将MaxUserPort设置为最大值以及注册表中的其他一些建议的TCPIP设置.
– 尝试在不同的接口(真实接口和环回)上运行两个服务器并使用多个客户端.

它是Windows中的已知限制还是可以以某种方式克服它?

谢谢您的帮助!

解决方法

我在一些Microsoft页面上发现:

... HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersMaxUserPort
registry subkey is defined as the maximum port up to which ports may be allocated for wildcard binds. The value of the MaxUserPort registry entry defines the dynamic port range…

因此,如果我强制端点使用某个端口,例如

IPEndPoint bindEndpoint = new IPEndPoint(IPAddress.Parse(args[0]),54321);

然后我可以在系统中打开超过64K的同时套接字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读