sd_bus_process(3) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | NOTES | HISTORY | SEE ALSO | COLOPHON

SD_BUS_PROCESS(3)             sd_bus_process            SD_BUS_PROCESS(3)

NAME         top

       sd_bus_process - Drive the connection

SYNOPSIS         top

       #include <systemd/sd-bus.h>

       int sd_bus_process(sd_bus *bus, sd_bus_message **ret);

DESCRIPTION         top

       sd_bus_process() drives the connection between the client and the
       message bus. That is, it handles connecting, authentication, and
       processing of messages. When invoked, pending I/O work is
       executed, and queued incoming messages are dispatched to
       registered callbacks. Each time it is invoked a single operation
       is executed. It returns zero when no operations were pending and
       positive if a message was processed. When zero is returned the
       caller should poll for I/O events before calling into
       sd_bus_process() again. For that either use the simple, blocking
       sd_bus_wait(3) call, or hook up the bus connection object to an
       external or manual event loop using sd_bus_get_fd(3).

       sd_bus_process() processes at most one incoming message per call.
       If the parameter ret is not NULL and the call processed a message,
       *ret is set to this message. The caller owns a reference to this
       message and should call sd_bus_message_unref(3) when the message
       is no longer needed. If ret is not NULL and progress was made, but
       no message was processed, *ret is set to NULL. Note that only
       messages not already handled by the various types of registered
       message handlers (i.e. by filters registered via
       sd_bus_add_filter(3), object handlers registered via
       sd_bus_add_object(3), matches registered via sd_bus_add_match(3),
       and related) will be returned through this parameter. Also note
       that if such a message handler returns a zero return value (as
       opposed to some value > 0) an incoming message will not be
       considered handled, and be passed to other suitable handlers
       (until one returns > > 0), or returned by sd_bus_process() (in
       case none returns > 0).

       If the bus object is connected to an sd-event(3) event loop (with
       sd_bus_attach_event(3)), it is not necessary to call
       sd_bus_process() directly as it is invoked automatically when
       necessary.

RETURN VALUE         top

       If progress was made, a positive integer is returned. If no
       progress was made, 0 is returned. If an error occurs, a negative
       errno-style error code is returned.

   Errors
       Returned errors may indicate the following problems:

       -EINVAL
           An invalid bus object was passed.

       -ECHILD
           The bus connection was allocated in a parent process and is
           being reused in a child process after fork().

       -ENOTCONN
           The bus connection has been terminated already.

       -ECONNRESET
           The bus connection has been terminated just now.

       -EBUSY
           This function is already being called, i.e.  sd_bus_process()
           has been called from a callback function that itself was
           called by sd_bus_process().

NOTES         top

       Functions described here are available as a shared library, which
       can be compiled against and linked to with the
       libsystemd pkg-config(1) file.

       All functions listed here are thread-agnostic and only a single
       thread may operate on a given object at any given time. Different
       threads may access the same object at different times. Multiple
       independent objects may be used from different threads in
       parallel.

       The code described here uses getenv(3), which is declared to be
       not multi-thread-safe. This means that the code calling the
       functions described here must not call setenv(3) from a parallel
       thread. It is recommended to only do calls to setenv() from an
       early phase of the program when no other threads have been
       started.

HISTORY         top

       sd_bus_process() was added in version 221.

SEE ALSO         top

       systemd(1), sd-bus(3), sd_bus_wait(3), sd_bus_get_fd(3),
       sd_bus_message_unref(3), sd-event(3), sd_bus_attach_event(3)

COLOPHON         top

       This page is part of the systemd (systemd system and service
       manager) project.  Information about the project can be found at
       ⟨http://www.freedesktop.org/wiki/Software/systemd⟩.  If you have a
       bug report for this manual page, see
       ⟨http://www.freedesktop.org/wiki/Software/systemd/#bugreports⟩.
       This page was obtained from the project's upstream Git repository
       ⟨https://github.com/systemd/systemd.git⟩ on 2026-08-04.  (At that
       time, the date of the most recent commit that was found in the
       repository was 2026-08-03.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there is
       a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

systemd 262~devel                                       SD_BUS_PROCESS(3)

Pages that refer to this page: sd-bus(3)sd_bus_attach_event(3)sd_bus_get_fd(3)sd_bus_get_n_queued_read(3)sd_bus_send(3)sd_bus_start(3)sd_bus_wait(3)systemd.directives(7)systemd.index(7)