cpanfile
:
requires 'Systemd::Daemon', '0.07'
server.pl
:
use strict;
use warnings;
use threads;
use Systemd::Daemon qw/$SD_LISTEN_FDS_START/;
use IO::Socket;
my $sfd = IO::Socket->new_from_fd($SD_LISTEN_FDS_START, '+<');
while (1) {
my $cfd = $sfd->accept();
threads -> create(\&worker, $cfd);
}
sub worker {
my $cfd = shift;
print $cfd '> ';
while (<$cfd>) {
print $cfd "< $_";
print $cfd "\n> ";
}
$cfd->close;
}
~/.config/systemd/user/perl-server.socket
:
[Unit]
Description=perl-server socket
[Socket]
ListenStream=/run/user/1000/perl-server.socket
[Install]
WantedBy=sockets.target
~/.config/systemd/user/perl-server.service
:
[Unit]
Description=perl-server socket
[Service]
WorkingDirectory=/home/yuri/_/socket-activation-2
Environment=PERL5LIB=/home/yuri/perl5/lib/perl5
ExecStart=/home/yuri/perl5/bin/carton exec perl server.pl
$ carton
$ systemctl --user daemon-reload
$ systemctl --user start perl-server.socket
$ ncat -U /run/user/1000/perl-server.socket
ubuntu dependencies: carton build-essential libsystemd-dev ncat