| SD_VARLINK_PUSH_FD(3) | sd_varlink_push_fd | SD_VARLINK_PUSH_FD(3) |
.SH "NAME" sd_varlink_push_fd, sd_varlink_push_dup_fd - Submit a
file descriptor to send along with the next outgoing Varlink message
.SH "SYNOPSIS"
#include <systemd/sd-varlink.h>
.HP 552u int sd_varlink_push_fd(sd_varlink *link,
int fd);
.HP 648u int sd_varlink_push_dup_fd(sd_varlink *link,
int fd);
.SH "DESCRIPTION"
.PP sd_varlink_push_fd() submits a file descriptor to send along with
the next outgoing Varlink message. Takes a Varlink connection object and a
file descriptor as parameter. The file descriptor is not duplicated, and
hence ownership of the file descriptor is passed to the Varlink connection
object (only on success; on failure the caller retains ownership). Once the
file descriptor has been written to the underlying transport socket it is
automatically closed. The calling application code should not touch the file
descriptor or close it on its own, otherwise it will interfere with the
Varlink protocol implementation. This call is only supported if the backing
transport supports file descriptor passing (effectively this means the
functionality is supported on local AF_UNIX only), and the concept is
not part of the Varlink protocol, but simply a feature of the underlying
transport.
.PP sd_varlink_push_dup_fd() is identical to
sd_varlink_push_fd(), except that the file descriptor is duplicated
automatically, and the calling application code hence retains ownership of
the provided file descriptor, and must close it on its own.
.PP Note that file descriptor passing is only permitted after a call to
sd_varlink_set_allow_fd_passing_output() that enables it, otherwise
these calls will fail with -EPERM.
.PP Note that on Linux a maximum of 253 file descriptors may be enqueued on
AF_UNIX sockets at once. Attempting to enqueue more on a single
Varlink message will fail with -ENOBUFS.
.SH "RETURN VALUE"
.PP On success, sd_varlink_push_fd() and
sd_varlink_push_dup_fd() return a non-negative integer. On failure,
they return a negative errno-style error code.
.SS "Errors"
.PP Returned errors may indicate the following problems:
.PP -EINVAL
An argument is invalid.
.RE
.PP -EBADF
The provided file descriptor is not valid.
.RE
.PP -EPERM
File descriptor passing has not been enabled via
sd_varlink_set_allow_fd_passing_output().
.RE
.PP -ENOBUFS
The maximum of 253 file descriptors have already been submitted for the next
outgoing Varlink message, no further descriptors may be enqueued for this
message.
.RE
.PP -ENOMEM
Memory allocation failed.
.RE
.SH "NOTES"
.PP Functions described here are available as a shared library, which can be
compiled against and linked to with the
libsystemd pkg-config(1) file.
.PP 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.
.SH "HISTORY"
.PP sd_varlink_push_fd() and sd_varlink_push_dup_fd() were
added in version 257.
.SH "SEE ALSO"
.PP systemd(1), sd-varlink(3)
| systemd 262.2 |