-1

我将使用 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 将保持正确,其独特作用将是侦听新连接。

4

1 回答 1

1

将完成键从指向函数的指针更改为指向数据块的指针。然后,此数据块可以包含您需要的任何状态信息。

在最简单的情况下,数据块将只包含您当前尝试用作完成键的函数指针。

于 2013-10-06T20:57:15.170 回答