Windows中的C ++:命名管道通信期间的GetLastError代码998

时间:2010-02-23 12:49:12

标签: windows visual-c++

我已经实现了一个与多个命名管道客户端通信的命名管道服务器。通常它可以工作,但在某些情况下,客户端将无法从TransactNamedPipe获得有效结果。返回的GetLastError代码是998(无效的内存访问)。这很奇怪,因为我用于TransactNamedPipe的句柄在CreateFile中有效。

我已经实现了客户端在检测到错误时重试(除非管道服务器不活动)。对于其他错误代码(997,230,231),它可以正常工作。但是当它遇到错误代码998时,无论重试多少次,命名管道服务器都不响应;在命名管道服务器日志中,它只是说客户端已断开连接,但没有数据交换。

这背后的原因是什么?是因为客户端请求来自多个线程,而命名管道服务器无法处理(几乎)同时发出的请求?我还实现了“锁”以防止从客户端到命名管道服务器的同时请求,但错误仍然发生。

我在网上搜索过这个类似问题的命名管道通信,但到目前为止还没有结果。

提前致谢

1 个答案:

答案 0 :(得分:0)

事实上,这很奇怪。我更新到最新的Windows SDK,将我的项目指向它,并且,在不对代码进行任何更改的情况下,它现在可以完美运行。它一定是一个已经修复过的bug。我使用的是VC ++ 9.0附带的库。