2017-09-19 56 views
0

正在关注this sample,我可以设置nMaxInstances
如何知道命名管道客户端的连接数超过允许的最大数量(包括服务和客户端)?如何知道何时有最大数量的命名管道客户端连接到服务?

+0

我不确定你在问什么。你想知道如何检测你的服务器的最大容量?或者你是否试图在达到最大容量后增加容量?或者你究竟在问什么? –

+0

@RemyLebeau:如何检测我的服务器何时处于最大容量?我编辑过。 –

+0

@RemyLebeau不能是后者,因为你不能这样做。 – EJP

回答

3

当您达到最大并发实例数时,创建超额实例将失败。

Microsoft haven't bothered to document their error codes for CreateNamedPipe(),所以不可能更具体。

编辑 @eryksun慷慨地提供了错误信息:ERROR_PIPE_BUSY。这在我1989年的OS/2手册中有明确的说明,但似乎在NT项目中已经迷失了方向。

+0

请注意,除非程序中存在错误,否则不会发生这种情况。 –

+0

@HarryJohnston如果您将管道定义为具有* N *个实例并接收* N *个连接,并且您试图创建第N + 1个实例,则所有这些都会保持打开状态,否则会发生这种情况。无论这是'错误'还是合法的检测限制方式,都有待解释。就我个人而言,我会依靠操作系统为我计算实例,而不是试图维持自己的计数。 – EJP

+3

尽管它没有记录,但为了完整起见,这种情况下的错误是'ERROR_PIPE_BUSY',即所有管道实例都很忙。当没有监听实例时,它和客户端的'CreateFile'错误是一样的。在NT API中,'NtCreateNamedPipeFile'系统调用返回'STATUS_INSTANCE_NOT_AVAILABLE',即已达到最大命名管道实例数。而对于客户端,'NtCreateFile'系统调用返回'STATUS_PIPE_NOT_AVAILABLE',即在监听状态下找不到命名管道的实例。 – eryksun

相关问题