错误 zx_err_peer_closed
表示尝试从对等互连的 Zircon 对象执行读取或写入操作失败。通常,这意味着对等端的远程端已关闭。许多不同类型的 Zircon 对象都可能会发生这种情况,包括:
- 频道
- 套接字
- FIFO
未能向对等互连的对象发出信号(例如 zx_object_signal_peer
)时,也可能会出现此错误。
本文档可帮助您排查导致 zx_err_peer_closed
错误的以下原因。
错误原因
以下是导致 zx_err_peer_closed
错误的潜在原因。
不兼容的 FIDL 协议
如果在客户端和服务器之间使用不兼容的 FIDL 协议并导致连接关闭,则会抛出 zx_err_peer_closed
错误。
如需解决此问题,请确保您的客户端和服务器使用相同的 FIDL 协议。如需详细了解 FIDL 协议,请参阅 FIDL 语言规范。
请求的协议未在组件清单中定义
与不兼容的 FIDL 协议类似,如果组件清单中未定义请求的协议,您会收到 zx_err_peer_closed
错误。
确保您的清单文件包含您要请求的协议。您可以使用 fidlcat
帮助诊断缺少的协议。
如需了解详情,请参阅:
- 如需详细了解组件清单,请参阅构建组件。
- Fidlcat:监控和调试 Fidlcat 调用,详细了解
fidlcat
。 - 组件领域,详细了解领域。
无法访问请求的文件
如果未能打开文件,系统会抛出 zx_err_peer_closed
错误。以下原因可能会导致此问题:
- 您正尝试打开的文件不存在
- 您正在尝试打开的文件请求的权限过多。
在这种情况下,请验证您请求的是现有文件,或者该文件和目录是否具有适当的权限。您可以详细了解目录权限及其指定方式。
对等方崩溃了,该进程已终止
如果对等设备崩溃,系统会处理崩溃并终止生成错误的进程以及所有关联对象,从而导致出现 zx_err_peer_closed
错误。
您可以查看日志,确认对等方是否已崩溃。在这种情况下,您可以使用 Just in Time Debugger 调试对等方,以查找崩溃的根源,然后重试该操作。
以组件作者身份向错误添加标志
作为组件作者,当用户看到 zx_err_peer_closed
错误时,请务必帮助用户获取更多有意义的错误消息。为此,您的代码应使用 binding::Close(zx_status_t epitaph_value) 绑定设置 epitaph。