gpt4 book ai didi

windows - 使用 NamedPipe 时,有什么方法可以检测客户端管道的句柄是否关闭?

转载 作者:可可西里 更新时间:2023-11-01 11:36:02 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以在 Windows 平台上从服务器端检测客户端管道句柄的状态。

即使客户端使用 CloseHandle() 函数关闭了管道(断开连接),但似乎无法从服务器端检测到它。

WaitForSingleObject() 与句柄对象一起使用会返回WAIT_OBJECT_0,无论客户端句柄的状态如何。那么,从服务器端以更低的成本检测客户端管道的句柄是否关闭的好的解决方案是什么?

最佳答案

如果您正在从管道(PIPE_ACCESS_INBOUNDPIPE_ACCESS_DUPLEX)读取数据,当客户端关闭其管道末端时,您将收到 ERROR_BROKEN_PIPE .即使您还没有准备好处理来自管道的数据,您也可以提前开始读取数据(使用异步 I/O)以检测管道何时损坏。

请注意,如果管道的客户端有多个句柄,只有在最后一个句柄关闭时才认为它已关闭。这可能是一个问题,例如,如果客户端无意中导致子进程继承句柄的副本。

我不知道有什么方法可以检测到客户端在没有向其写入数据的情况下关闭了仅出站管道。最好的选择可能是使用 PIPE_ACCESS_DUPLEX,即使管道的入口端仅用于检测管道何时破裂。

为了将来引用,虽然句柄可以用作同步对象,但不建议这样做,据我所知,唯一支持的用途是检测没有事件对象的异步 I/O 操作的完成指定。

关于windows - 使用 NamedPipe 时,有什么方法可以检测客户端管道的句柄是否关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com