blob: 7705e40fff215562b51c1230e17199d27cd62f9e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket::INET;
use Fcntl;
my $socket = IO::Socket::INET->new(
LocalAddr => "localhost:0",
Listen => 1
);
sysopen(my $fh, $ARGV[0], O_WRONLY|O_CREAT|O_EXCL, 0666) or die "open: $ARGV[0]: $!";
my $pid = fork();
if ($pid > 0) {
print $fh $pid;
print $socket->sockport()."\n";
exit;
}
close($fh);
open(STDIN, '</dev/null');
open(STDOUT, '</dev/null');
my @cmd = @ARGV;
shift @cmd;
while (1) {
my $conn = $socket->accept();
my $worker = fork();
if ($worker == 0) {
open(STDIN, '<&', $conn);
open(STDOUT, '>&', $conn);
close($conn);
close($socket);
exec @cmd;
exit
}
close($conn);
}
|