我目前正在使用 IO 完成端口研究基于命名管道的 IPC 机制。
不幸的是,我在使用 msdn 文档时遇到了一些问题,因为我不清楚在哪些情况下调用 ReadFile/WriteFile 会导致完成数据包。
ERROR_IO_PENDING 返回 FALSE 的情况很清楚,但是当 ERROR_MORE_DATA 返回时显然可能的情况呢?这种情况下会有完成包吗?此外,如果返回其他错误怎么办?在哪些情况下我必须直接而不是在完成处理程序中处理结果和释放资源?
另一种情况是如果 ReadFile/WriteFile 甚至成功,这显然也是可能的。谢天谢地, MSDN 对此非常清楚:
此外,WriteFile 函数有时会返回 TRUE,GetLastError 值为 ERROR_SUCCESS,即使它使用异步句柄(也可以返回 FALSE 和 ERROR_IO_PENDING)。...在此示例中,建议允许完成端口例程单独负责此类资源的所有释放操作。
这个建议是否在所有情况下都是正确的,并且分配给完成端口的句柄的 ReadFile/WriteFile 操作的结果实际上可以(并且应该)被完全忽略,因为无论如何都会将数据包发送到端口?