0

我做了一些 IOCP 服务器和客户端测试。IOCP 服务器接受客户端的连接,除了从客户端接收数据包之外什么都不做。客户端连接服务器并将数据包发送到无限循环中的服务器。

我设置了一个柜台。当服务器接受客户端时它会增加,当套接字关闭时它会减少。

这是一个问题:计数器增加到 32261 并且不再增加。服务器无法接受更多连接,GetLastError() 返回 10055, WSAENOBUF。

我的操作系统是 Windows XP,内存是 4GB。我已经检查了非分页内存。我想我的记忆力已经足够了。

什么限制了最大连接数?如何扩大最大连接数?

4

2 回答 2

1

如果没有看到您的代码,很难说出是什么导致了您的问题。不太可能是非分页池耗尽;我已经在只有 760MB 内存的 Windows Server 2003 上运行了测试,并通过基于 IOCP 的服务器实现了超过 70,000 个并发连接(参见此处)。它可能是 I/O 页面锁定限制(请参阅此处);但这取决于您的服务器在接受连接后正在做什么,它是否发布读取,如果是,那么缓冲区大小是多少?据我所知,非分页池耗尽和 I/O 页面锁定限制都会WSAENOBUF出错。

您是否在更现代和/或服务器级的操作系统上尝试过您的测试?Vista 和更高版本使更多的非分页池可用(请参阅此处了解详细信息)...

于 2011-03-23T18:32:12.140 回答
0

达到了不可分页内存的限制。您是否使用Push Framework来测试 IOCP ?

于 2011-03-23T09:49:17.060 回答