hp at redhat.com
Mon Feb 5 14:41:17 PST 2007
> The low-level API docs seem good; I'm just missing the bird's eye view.
> I'm trying to figure out what exactly dbus needs the program to do.
> When using the set_watch_functions, do dbus method calls (from within
> the program) turn into DBusWatch objects that need sending and
> recieving, or does dbus_connection_send attempt to use the socket
> directly? I assume from the docs (" Adds a message to the outgoing
> message queue.") that it's the former, but I'm just not entirely clear
> on everything yet.
The socket is owned by and used directly by the DBusConnection; libdbus
will write the DBusMessage to it (and read DBusMessage from it). The
DBusWatch is just so you can select() or poll() on both the
DBusConnection socket *and* some other descriptors specific to your
application at the same time. In other words DBusWatch tells you which
descriptors libdbus wants you to include in your main loop
If you don't have any other descriptors you can ignore DBusWatch and
just block in dbus_connection_read_write(), which will simply block on
the connection socket.
dbus_connection_send() will do two things:
- insert the DBusMessage into an outgoing queue
- if the queue goes from 0 messages to 1 messages, it will enable the
write watch, which would cause your main loop to wake up
When you then call dbus_watch_handle() on the write watch, or call
dbus_connection_read_write(), the outgoing message queue will be drained
by writing it out to the socket.
More information about the dbus