launch(3) | Library Functions Manual | launch(3) |
launchd APIs
—
interfaces for interacting with a launchd job.
#include
<launch.h>
#include
<servers/bootstrap.h>
kern_return_t
bootstrap_check_in
(mach_port_t
bp, const name_t service_name,
mach_port_t *sp);
int
launch_activate_socket
(const char
*name, int **fds, size_t
*cnt);
A launchd(8) job may have resources that are held on behalf of it while it is not running to facilitate launch-on-demand. These interfaces allow for the job to retrieve these resources as part of its initialization.
Currently supported resource types are XPC listener connections, Mach ports, and sockets. Use of XPC with launchd(8) is documented in the xpc(3) family of manual pages.
The
bootstrap_check_in
()
routine allows for a launchd(8) job to
retrieve the receive right to a Mach port that
launchd(8) has created on behalf of
the job. launchd(8) creates this port
and advertises it in the appropriate Mach bootstrap namespace by parsing the
MachServices entry of the job's
launchd.plist(5). The first
argument to bootstrap_check_in
() should always be
the
bootstrap_port
()
global. The second argument should be the name of the service whose port you
wish to retrieve, as specified as an entry in the job's MachServices
dictionary. The final argument, upon successful return, will be the name of
the receive right corresponding to the port that
launchd(8) had advertised in the
bootstrap namespace.
If the job closes the receive right to the
port with
mach_port_mod_refs
()
or exits, the receive right obtained by this routine will be send back to
launchd(8) rather than being closed.
This allows launchd to resume advertising the same port in the Mach
bootstrap namespace and frees clients from the need to re-query for the send
right to that port when the job dies.
The
launch_activate_socket
()
routine allows a launchd(8) job to
retrieve a set of file descriptors corresponding to a socket service that
launchd(8) has created and advertised
on behalf of the job by parsing the Sockets entry in the job's
launchd.plist(5). The first
argument should be the name of the socket entry as specified in the
launchd.plist(5). The second
argument, upon output, will point to an array of integers whose count is
filled into the third argument upon success. This array represents all the
sockets that launchd(8) created
corresponding to the entry in the job's Sockets dictionary. Depending on the
properties specified, a single Sockets entry may have multiple descriptors
created for it (one for IPv4 and one for IPv6, for example). This array is
allocated on the heap, and it is the caller's responsibility to call
free(3) to dispose of the memory when it
is no longer needed.
If launch_activate_socket
() succeeds, zero
is returned. In the event of failure, a non-zero POSIX-compatible error code
indicating the nature of the error is returned. This error may be decoded
with strerror(3).
If bootstrap_check_in
() succeeds,
KERN_SUCCESS is returned. In the event of failure, a non-zero error code
that may be decoded with bootstrap_strerror
().
bootstrap_check_in
() will fail if:
BOOTSTRAP_UNKNOWN_SERVICE
]BOOTSTRAP_SERVICE_ACTIVE
]launch_activate_socket
() will fail if:
ENOENT
]ESRCH
]EALREADY
]xpc(3), xpc_connection_create(3), socket(2), launchd(8), launchd.plist(5).
31 March, 2014 | Darwin |