Skip to content

Instantly share code, notes, and snippets.

@x-yuri
Last active October 10, 2022 10:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save x-yuri/45f53c16a99337ba0716a988290491bd to your computer and use it in GitHub Desktop.
Save x-yuri/45f53c16a99337ba0716a988290491bd to your computer and use it in GitHub Desktop.
perl: socket activation (Accept=no)

perl: socket activation (Accept=no)

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment