Hye我使用命名管道进行rpc,当服务器收到一个写入管道的异常(例如客户端突然关闭),我捕获异常,调用断开的命名管道,然后尝试调用connectNamedPipe,得到232:管道正在关闭。我的问题是如何解决这个问题,所以当我得到一个异常后,再开始监听管道。
发布于 2014-08-19 20:35:59
对不起,但不知道是不是太晚了。这条线似乎挺旧的。
但是为了那些像我一样在这里搜索这个问题的人的利益。
线程启动器面临的问题很简单,客户端无法在断开连接后重新连接到同一个管道!
因此,如果客户端的管道突然关闭,服务器端的管道也就死了。如果您想要重新连接,服务器需要提供另一个CreateNamedPipe函数来获得新连接并要求客户端尝试它。
关键是对管道的理解。
发布于 2017-03-28 13:01:28
我也遇到过同样的问题,但和里昂有点不同。
在我的例子中,ReadFile()返回232“管道正在关闭”。传达的信息是误导。管道没有被关闭。ReadFile()只是在没有读取任何数据的情况下返回。
由于我创建的管道是非阻塞的,所以ReadFile()在没有数据的情况下立即返回是非常有意义的。
如果您检查winerror.h中的错误代码,即"ERROR_NO_DATA",这比“管道正在关闭”要好得多
https://stackoverflow.com/questions/19636548
复制相似问题