我目前正在使用IO完成端口基于命名管道的IPC机制。何时发送IO完成端口数据包,何时不完成?
不幸的是,我有一些msdn文档的麻烦,因为我很不清楚在哪些情况下调用ReadFile/WriteFile导致完成数据包。
用ERROR_IO_PENDING返回FALSE的情况很明显,但是当返回ERROR_MORE_DATA时显然可能出现这种情况呢?在这种情况下是否会有完成数据包?而且,如果返回其他错误呢? 在哪些情况下我必须直接处理结果和释放资源,而不是在完成处理程序中?
另一种情况是,如果ReadFile/WriteFile甚至成功,这显然也是可能的。 MSDN是幸运的是了解这个here很清楚:
此外,WriteFile函数有时会返回TRUE与ERROR_SUCCESS的GetLastError函数值,即使它是使用异步手柄(也可返回FALSE与ERROR_IO_PENDING)。 ...在这个例子中,建议是允许完成端口例程全权负责这些资源的所有释放操作。
这是建议在所有情况下是正确的,并且ReadFile的/ WriteFile的工作分配给完成端口句柄的结果可以(也应该)实际上被完全忽略,因为数据包被发送到端口反正?