我将使用CreateNamedPipe()创建的HANDLE“h_server”与I / O完成端口关联, 对于完成键,我使用了一个函数指针:namedpipe_server_completion_routine()。
现在,当命名管道客户端连接请求触发时,HANDLE“h_server”成为客户端端点 在命名管道服务器应用程序中,所以我应该将其I / O完成密钥更改为另一种例程指针,即完成I / O,读取,写入等,io_arrival_completion_routine(),它与命名管道服务器完成不同例程。
我想再次使用该HANDLE上的新完成键调用CreateIoCompletionPort(),但它似乎不起作用,所以有一种方法可以更改该键吗?也许有一些使用DuplicateHandle的东西?
如果没有,我怎么解决这个问题?
注意:此问题仅出现在命名管道服务器上,因为AcceptEx()以不同的方式工作:使用tcp服务器,当连接到达时,您基本上为服务器上的客户端端点获得了新的HANDLE,因此您可以将 new HANDLE与io完成端口和正确的完成键关联为正确的io_arrival_completion_routine(),而与tcp_server_completion_routine()关联的tcp服务器的HANDLE将保持正确,并且其唯一的作用将是倾听新的联系。
答案 0 :(得分:1)
将完成键从指向函数的指针更改为指向数据块的指针。然后,该数据块可以包含您需要的任何状态信息。
在最简单的情况下,数据块只包含您当前尝试用作完成键的函数指针。