Dbus Messages Guaranteed?

Havoc Pennington hp at redhat.com
Fri Jun 29 10:59:19 PDT 2007


Hi,

Patrick Davis wrote:
> Simple question. Does DBus guarantee delivery of messages, specifically
> methods, assuming the functions are called properly, and that there is
> sufficient memory in the server for the daemon to receive the message? 

If you ask for a reply (don't set the no reply flag) generally you can 
assume either the message will go through or you will get a reply (the 
reply may be an error, though).

> If not, what else besides improper calls and insufficient memory can
> cause messages to not be delivered?

Disconnection/crash by either the sender or recipient is another 
possibility. Also if there's a security policy that blocks a message it 
will get an error instead of going through.

If both sender and recipient remain connected, there is no reason to 
expect delivery to fail.

If using TCP instead of local unix sockets, of course all the usual 
network errors can happen (timeouts, DNS failures, etc.)

Generally dbus is a reliable transport in the same way that TCP or UNIX 
domain sockets are, and has the same kind of failure modes. Not 
surprising since dbus is just a way to send messages over sockets.

If you want to know a message was definitely received you should check 
for the successful reply to the method call - that's the only proof that 
the other end processed the message.

Without a reply, even if the message was fully written out to the 
recipient by the bus daemon, you don't know that the recipient read it 
off the socket (the recipient may have exited without ever reading, for 
example).

If the bus daemon writes out a message to a recipient and the recipient 
disconnects before replying, the bus daemon generates a timeout error 
reply for the still-pending call.

Havoc


More information about the dbus mailing list