4

嘿,我正在为 rpc 使用命名管道,当服务器收到写入管道的异常(例如客户端突然关闭)时,我捕获了异常,调用断开命名管道,然后我尝试调用 connectNamedPipe,我得到 232:管道正在关闭。我的问题是如何解决这个问题,所以在我得到一个异常之后再次开始在管道上收听

4

2 回答 2

4

对不起,但不知道是否为时已晚。这个线程似乎很老了。

但只是为了那些像我一样在这里谷歌这个问题的人的利益。

线程启动器面临的问题很简单,客户端在断开连接后无法重新连接到同一管道!

所以如果客户端的管道突然关闭,服务器端的管道也死了。如果要重新连接,服务器需要提供另一个 CreateNamedPipe 函数来获取新的连接,并要求客户端尝试。

关键是对管道的理解。

于 2014-08-19T20:35:59.617 回答
1

我遇到了同样的问题,但与 Leon 有点不同。

就我而言,ReadFile() 返回 232“管道正在关闭”。该消息是误导性的。管道未关闭。ReadFile() 只是返回而没有读取任何数据。

由于我创建的管道是非阻塞的,因此 ReadFile() 在没有数据的情况下立即返回非常有意义。

如果查看winerror.h中的错误码,就是“ERROR_NO_DATA”,比“管道正在关闭”要好很多

于 2017-03-28T13:01:28.853 回答