Index · Directives systemd 263~devel

Name

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

Synopsis

#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);
 

Description

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.

Return Value

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.

Errors

Returned errors may indicate the following problems:

-EINVAL

The specified Varlink connection is invalid. (Not returned by sd_varlink_is_connected() and sd_varlink_wants_reply().)

Notes

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.

History

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.

See Also

systemd(1), sd-varlink(3), sd_varlink_send(3)