On Fri, Jan 06, 2017 at 03:29:30PM +0000, Stefan Hajnoczi wrote: > AF_UNIX and AF_VSOCK listen sockets can be passed in by systemd on > startup. This allows systemd to manage the listen socket until the > first client connects and between restarts. Advantages of socket > activation are that parallel startup of network services becomes > possible and that unused daemons do not consume memory. > > The key to achieving this is the LISTEN_FDS environment variable, which > is a stable ABI as shown here: > https://www.freedesktop.org/wiki/Software/systemd/InterfacePortabilityAndStabilityChart/ > > We could link against libsystemd and use sd_listen_fds(3) but it's easy > to implement the tiny LISTEN_FDS ABI so that qemu-ga does not depend on > libsystemd. Some systems may not have systemd installed and wish to > avoid the dependency. Other init systems or socket activation servers > may implement the same ABI without systemd involvement. > > Test as follows: > > $ cat ~/.config/systemd/user/qga.service > [Unit] > Description=qga > > [Service] > WorkingDirectory=/tmp > ExecStart=/path/to/qemu-ga --logfile=/tmp/qga.log --pidfile=/tmp/qga.pid > --statedir=/tmp > > $ cat ~/.config/systemd/user/qga.socket > [Socket] > ListenStream=/tmp/qga.sock > > [Install] > WantedBy=default.target > > $ systemctl --user daemon-reload > $ systemctl --user start qga.socket > $ nc -U /tmp/qga.sock > > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > v2: > * Drop libsystemd dependency [danpb] > > qga/channel.h | 3 ++- > qga/channel-posix.c | 66 ++++++++++++++++++++++++++--------------------- > qga/channel-win32.c | 2 +- > qga/main.c | 74 > +++++++++++++++++++++++++++++++++++++++++++++++++---- > 4 files changed, 109 insertions(+), 36 deletions(-)
Reviewed-by: Daniel P. Berrange <berra...@redhat.com> Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|