私は現在、IO完了ポートを使用する名前付きパイプに基づくIPCメカニズムに取り組んでいます。
残念ながら、msdnのドキュメントに問題があります。これは、ReadFile / WriteFileを呼び出すと、完了パケットが生成されるかどうかがはっきりしないためです。
ERROR_IO_PENDINGでFALSEが返される場合は明らかですが、ERROR_MORE_DATAが返される場合の明らかに可能な場合はどうでしょうか。この場合、完了パケットはありますか?さらに、他のエラーが返された場合はどうなりますか?どの場合、完了ハンドラーではなく、結果を処理してリソースを直接解放する必要がありますか?
もう1つのケースは、ReadFile / WriteFileが成功した場合ですが、これも可能です。ありがたいことに、MSDNはこれについてかなり明確です:
さらに、WriteFile関数は、非同期ハンドルを使用している場合でも、GetLastError値がERROR_SUCCESSの場合にTRUEを返すことがあります(ERROR_IO_PENDINGの場合はFALSEを返すこともあります)。...この例では、完了ポートルーチンがそのようなリソースのすべての解放操作に対して単独で責任を負うことを許可することをお勧めします。
この推奨事項はすべての場合に正しいのでしょうか。また、完了ポートに割り当てられたハンドルに対するReadFile / WriteFile操作の結果は、パケットがポートに送信されるため、実際には完全に無視できますか(実際には無視する必要があります)。