Windows在实践中命名管道


问题内容

随着Windows命名管道,什么是使用正确的方法CreateNamedPipeConnectNamedPipeDisconnectNamedPipe,和CloseHandle电话?

我正在制作一个连接到客户端应用程序的服务器应用程序,该客户端应用程序在一个会话中多次连接和断开与管道的连接。

当我写失败,因为客户端断开连接,我应该打电话DisconnectNamedPipeCloseHandle或没有在我的把手。

然后,要接受新的连接,我应该先打电话给CreateNamedPipe,然后再打电话ConnectNamedPipe,还是给ConnectNamedPipe

我非常想解释这些调用导致管道处于不同状态的原因,因为我没有在其他地方找到它。

附加信息:

语言:使用Python win32pipewin32filewin32api图书馆。

管道设置:等待,无重叠,字节流。


问题答案:

我设法实现了我想要的。我打电话CreateNamedPipeCloseHandle每节只有一次,我打电话DisconnectNamedPipe时,我写失败,紧接着又ConnectNamedPipe

诀窍是仅DisconnectNamedPipe在实际连接管道时调用。每当我尝试“确定”连接时,我都会调用它,这给了我奇怪的错误。

有关管道的更多信息,另请参见djgandy的答案。