# sd_bus_wait

systemd

sd_bus_wait

3

sd_bus_wait

Wait for I/O on a bus connection

\#include \<systemd/sd-bus.h\>

int

sd_bus_wait

sd_bus \*

bus

uint64_t

timeout_usec

# Description

`sd_bus_wait()` synchronously waits for I/O on the specified bus connection object. This function is supposed to be called whenever `sd_bus_process(3)` returns zero, indicating that no work is pending on the connection. Internally, this call invokes `ppoll(2)`, to wait for I/O on the bus connection. If the `timeout_usec` parameter is specified, the call will block at most for the specified amount of time in μs. Pass `UINT64_MAX` to permit it to sleep indefinitely.

After each invocation of `sd_bus_wait()` the `sd_bus_process()` call should be invoked in order to process any now pending I/O work.

Note that `sd_bus_wait()` is suitable only for simple programs as it does not permit waiting for other I/O events. For more complex programs either connect the bus connection object to an external event loop using `sd_bus_get_fd(3)` or to an `sd-event(3)` event loop using `sd_bus_attach_event(3)`.

# Return Value

If any I/O was seen, a positive value is returned, zero otherwise. 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.

# History

`sd_bus_wait()` was added in version 240.

# See Also

`systemd(1)`, `sd-bus(3)`, `sd_bus_process(3)`, `sd_bus_get_fd(3)`, `sd-event(3)`, `sd_bus_attach_event(3)`