我正在使用 ctypes 模块在 Python 中使用 Windows DLL API编写基于 IO 完成端口的服务器(此处为源代码)。但这是 API 的一个非常直接的用法,这个问题是针对那些了解 IOCP 而不是 Python 的人。
据我了解 CreateIoCompletionPort 的文档,当您使用与创建的 IOCP 关联的文件句柄(在我的情况下为套接字)调用此函数时,您指定了“用户定义的”完成键。当您开始调用 GetQueuedCompletionStatus 时,您将获得一个完成键值以及一个指向重叠对象的指针。完成键应标识已完成的重叠对象和请求。
但是,假设我在 CreateIoCompletionPort 调用中使用重叠对象传入 100 作为完成键。当同一个重叠对象的 IO 完成并通过 GetQueuedCompletionStatus 返回时,伴随它的完成键要大得多,与原始值 100 没有任何相似之处。
我是否误解了完成键的工作原理,还是我在上面链接的源代码中做错了?