我将使用 CreateNamedPipe() 创建的 HANDLE“h_server”与 I/O 完成端口相关联,对于完成键,我使用函数指针:namedpipe_server_completion_routine()。
现在,当触发命名管道客户端连接请求时,该 HANDLE "h_server" 成为命名管道服务器应用程序中的客户端端点,因此我应该将其 I/O 完成键更改为另一种例程指针,即完成 I/ O、Read、Write 等,io_arrival_completion_routine(),与命名管道服务器完成例程不同。
我想用那个 HANDLE 上的新完成键再次调用 CreateIoCompletionPort(),但它似乎不起作用,所以有办法改变那个键吗?也许与 DuplicateHandle 或其他东西有一些技巧?
如果没有,我该如何解决这个问题?
注意:这个问题只存在于命名管道服务器,因为 AcceptEx() 以不同的方式工作:对于 tcp 服务器,当连接到达时,您基本上会在服务器上为客户端端点获得一个新 HANDLE,因此您可以将其关联起来带有 io 完成端口和正确完成键的新HANDLE 作为正确的 io_arrival_completion_routine(),而与 tcp_server_completion_routine() 关联的 tcp 服务器的 HANDLE 将保持正确,其独特作用将是侦听新连接。