- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道当直接通过低级 C API 调用 dbus_connection_send_with_reply
使用时,D-Bus 是否保证消息传递?
更具体地说,它是否保证将消息的单个实例传递到目的地,或者如果失败则返回错误回复?
我了解接收应用程序可能不会对某个方法发出回复,在这种情况下,D-Bus 将在超时后返回错误。但是,D-Bus 协议(protocol)是否涵盖所有其他潜在故障?
最佳答案
tl;博士:
交货永远无法保证。但是,即使消息未送达,您也可能收到错误回复。
如果您使用 DBUS_TIMEOUT_INFINITE
,您可能会永远等待回复。如果函数调用返回FALSE
,则不会有回复。否则,您将得到一个。
我是 D-Bus(消息传递协议(protocol)规范)和 dbus(D-Bus 的引用实现)的上游维护者。
术语:调用dbus_connection_send_with_reply()
的进程是客户端,预期回复的进程是服务。通常在两者之间会有一个 dbus-daemon
,尽管在特殊情况下直接连接到服务是可能的(如果你正在这样做,那么你应该已经知道你正在这样做)。
一般来说,API 保证是如果 dbus_connection_send_with_reply()
成功(返回 TRUE
),您将看到一个回复,可以是成功返回(仅当消息已送达时)或错误(无论消息是否已送达都可能发生)。如果由于内存不足或其他异常情况(返回 FALSE
)而失败,您将完全看不到回复。为了确保这一点,实现过程付出了相当大的努力。
在 dbus_connection_send_with_reply()
返回之前,它会预先分配如果调用超时您将收到的合成错误消息;如果失败,则不会发送消息并且 dbus_connection_send_with_reply()
失败。因此,即使 dbus-daemon
或传输器将真正的(成功或错误)回复丢弃在地板上,您最终还是会收到超时错误消息。 (引用:dbus
源代码副本中的 git grep _dbus_pending_call_set_timeout_error_unlocked
)
该 API 保证的一个异常(exception)是,如果您使用 DBUS_TIMEOUT_INFINITE
作为超时(在这种情况下:您要求它,您得到它)。在那种情况下,有些情况下您将永远看不到回复:要么服务从不响应但仍然在总线上;要么或者,更病态地,服务从不响应并离开总线,并且 dbus-daemon
在尝试传递错误回复时内存不足来自服务的回复。
关于c - D-Bus 是否保证消息传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158160/
所以我有这个要求,它接收一个文档,然后需要在输出中创建一个或多个文档。 在这个过程中,需要判断文档是否已经存在,因为申请创建和更新场景有不同的操作。 在直接代码中,这会很简单(概念上) InputDa
我想知道在 IBM Integration Bus 中存储数据库参数的最佳位置在哪里。例如,如果我们有开发、测试和生产环境,每个环境都有一个单独的数据库(当然),那么如何最好地组织数据库连接属性的更改
我正在从事一个项目,在该项目中,我必须与连接的任何设备(ttyS0、ttyS1 或 ttyUSB0)进行一些串行通信。幸运的是,我遇到了一个非常有用的 stackoverflow 链接:“Simple
企业服务总线(ESB)、.NET 服务总线(Windows Azure AppFabric 服务总线)、NServiceBus、RhinoServiceBus、MassTransit 等。 我试图了解
我现在使用Virtual Box启动VM,版本是5.1.26 r117224(Qt5.6.2),但是当我尝试启动VM时,我看到了下面的错误消息: 00:00:29.246866 VMMDev: Gue
从这个周末开始,我每小时都会从我的服务器收到一封邮件,其中包含以下消息: /etc/cron.hourly/mcelog.cron: mcelog: Cannot access bus thresho
Oracle 是否有两个 ESB 产品:Aqualogic Service Bus 和 Oracle Service Bus,或者 ALSB 是否合并到 Oracle SB 产品中? 最佳答案 目前,
为什么我的 RootManageSharedAccessKey 连接字符串无效? 代码: 执行下面的代码时,我收到有关无效连接字符串的错误: serviceBusClient <- new Servi
一 点睛 消息中间件提供了系统之间的异步处理机制,比如在电商网站上支付订单之后,会触发库存计算,物流调度计算,甚至是营销人员绩效计算,报表统计等,诸如此类的操作一般会耗费比订单购买商品本身更多的时间,
基本了解CANopen网络中PDO映射的概念。它允许广播带有小 header 的实时数据。 它是怎样炼成的?如何设置我的设备以了解如何发送/接收 PDO?我需要某种软件吗? 最佳答案 很多问题的答案取
我想知道我们如何计算某些标准 CAN id 集的软件接受过滤器掩码。如果有人可以用示例解释这一点,那就太好了。还请建议一些链接/ Material 来学习 CAN 堆栈软件实现。 提前致谢。 最佳
什么是消息总线 1. 概念 在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例, 它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线 2.
一 点睛 有这样一个场景,就是监控某个硬件设备的运行时数据,然后记录到数据库。 可以这样做:该硬件设备在运行的过程中,将一些性能信息等写入特殊的数据文件中,需要做的就是监控文件的变化,读取最后一行数据
I will use CANOpen in linux. In kernel, linux has socketcan and i have some questions for further im
我想用 corss_compiler D-bus 来武装。 工具链:arm-linux-gcc-3.4.1 配置选项:CC=arm-linux-gcc ./configure --prefix=/op
当您将多个连接连接到节点上的单个输出终端时会发生什么。 我找不到关于此的任何 IBM 文档,但工具包并没有阻止我这样做。 这只是一个例子,但我想知道当您对任何节点执行此操作时的一般行为,而不仅仅是输入
如何创建多个虚拟套接字并将它们链接在一起以创建虚拟总线? 我想模拟一个应用程序,其中许多节点通过 CAN 相互通信。 最佳答案 您所需要的只是 can-utils 中的 cangw 工具。 。创建两个
我正在使用Azure Service Bus SubscriptionClient.OnMessage方法;配置为最多同时处理5条消息。 在代码内,我需要等待所有消息完成处理后才能继续(正确关闭Azu
如何使用 C 列出 D-Bus sessionBus 中的所有名称? 我正在寻找C GIO相当于 dbus.list_names python method 我想列出“org.mpris.MediaP
这个问题已经有答案了: Why does modifying a string literal cause a segmentation fault? [duplicate] (1 个回答) 已关闭
我是一名优秀的程序员,十分优秀!