sd_varlink_is_connected, sd_varlink_is_idle, sd_varlink_wants_reply — Query if a Varlink connection object is currently connected, idle, or expected to reply to a method call
#include <systemd/sd-varlink.h>
int sd_varlink_is_connected( | sd_varlink *link); |
int sd_varlink_is_idle( | sd_varlink *link); |
int sd_varlink_wants_reply( | sd_varlink *link); |
sd_varlink_is_connected() checks whether the specified Varlink connection
object is currently connected or whether it has been fully disconnected already. If
link is NULL, the function returns 0, since a non-existent
connection is not connected.
sd_varlink_is_idle() checks whether the specified Varlink connection object is
currently connected but idle, i.e. may accept a method call for enqueuing (if client side of a Varlink
connection) or is waiting for more incoming method calls to arrive (if server side of a Varlink
connection).
sd_varlink_wants_reply() checks whether the specified Varlink connection
object has an incoming method call awaiting a reply. No final reply or error has been enqueued for
the call yet, and the method call was not issued with the "oneway" flag set. This is
useful on the server side of a Varlink connection, in particular in method call handlers that invoke
helper functions that might or might not have replied
to the method call already, for example with an error, before returning. Once a final reply or error
has been enqueued for transmission, this function returns 0.
While a method call invoked with the "more" flag set is processed, this function
continues to return a positive value after sd_varlink_notify() has been called,
as a final reply is still expected. If sd_varlink_set_sentinel() has been called,
sd_varlink_reply() buffers the latest reply until the method handler returns so
that the reply can be flagged as non-final if further replies follow.
sd_varlink_wants_reply() continues to return a positive value until the buffered
reply is enqueued as the final reply.
A positive value is also returned while a fiber method handler runs, or after a method handler returns without replying, having taken a reference to the connection object to reply asynchronously later.
On the client side of a Varlink connection this function always returns 0. If link is
NULL, the function returns 0, since a non-existent connection does not expect a
reply.
If the connection is currently connected sd_varlink_is_connected() returns a
positive non-zero value. If disconnected (or if NULL is specified) it returns 0.
If the connection currently is idle sd_varlink_is_idle() returns a positive
non-zero integer. If not, returns 0. If a reply to the method call currently being processed is
expected sd_varlink_wants_reply() returns a positive non-zero integer. If not (or
if NULL is specified), it returns 0. On failure,
sd_varlink_is_idle() returns a negative errno error
code.
Functions described here are available as a shared
library, which can be compiled against and linked to with the
libsystemd pkg-config(1)
file.
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.
sd_varlink_is_connected() was added in version 259.
sd_varlink_is_idle() was added in version 257.
sd_varlink_wants_reply() was added in version 263.