Rob*_*ves 9 winapi named-pipes disconnect
我正在学习命名管道,并且正在使用来自MSDN doc的命名管道客户端和服务器示例:
我修改了客户端,因此我可以在控制台中键入消息并将它们发送到显示消息的服务器并发回回复.本质上我添加了一个循环,它在SetNamedPipeHandleState()调用之后开始并在CloseHandle()调用之前结束(即在循环外发生打开和关闭,所以我在循环中使用相同的管道句柄).
我的问题是,如果我杀了客户端(通过关闭它或通过任务管理器结束它)是否有任何方法让服务器端检测断开连接?
我尝试使用GetNamedPipeHandleState()希望它返回失败,并且对GetLastError()的调用将返回ERROR_PIPE_NOT_CONNECTED,但事实并非如此.由于设置此服务器的方式,我必须在CompletedReadRoutine函数中执行此操作并创建"受控"故障.我做的是,在服务器的CompletedReadRoutine上有一个断点:
对GetNamedPipeHandleState()的调用成功返回,因此我从未进行过GetLastError()调用.当它到达WriteFileEx调用时它失败并且在那时对GetLastError的调用返回ERROR_NO_DATA.
看管道功能,我看不到任何可能有用的东西.我遗漏了一些东西,或者客户端断开连接只是检测不到.
我能想到的另一件事是收集连接客户端的pid(通过GetNamedPipeClientProcessId)并关闭看门狗线程以检查它们是否仍然存活.虽然,只是考虑这样做会引发我的蜘蛛般的感觉.
有没有办法在使用命名管道时检测断开连接的客户端?
不ReadFile()返回错误GetLastError()然后返回ERROR_BROKEN_PIPE?
| 归档时间: |
|
| 查看次数: |
7326 次 |
| 最近记录: |