2010-02-23 37 views
0

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

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

这背后的原因是什么?是否因为客户端请求来自多个线程,并且命名管道服务器无法应付(几乎)同时发生的请求?我还实现了“锁定”来防止来自客户端的命令同时发送到命名管道服务器,但错误仍然存​​在。

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

在此先感谢

回答

0

确实很奇怪。我更新到最新的Windows SDK,将我的项目指向它,并且在不对代码进行任何更改的情况下,它现在可以正常工作。它一定是一个已经修复的bug。我使用的是VC++ 9.0附带的库文件。