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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/perl -w
=head1 NAME
tmux-server - Internet server for tmux
=head1 SYNOPSIS
tmux-server [options]
--help
--name <socket name>
--port <port> Listens on <port> [TCP service] and accepts a
TCP/IP connection. The IP version is 4 or
environment variable
SOCAT_DEFAULT_LISTEN_IP.
Default is 53505.
--bind <sockname> Binds the socket to the given socket address
using the bind() system call.
[hostname|hostaddress][:(service|port)]
Default is (*).
--daemonize (Default)
--no-daemonize
=head1 DESCRIPTION
TODO
=cut
use strict;
# Option handling
#
use Getopt::Long ();
Getopt::Long::GetOptions(
help => \&pod2usage,
debug => \ my $debug,
name => \ my $socket_name,
bind => \ my $bind_address,
port => \ my $tcp_port,
'daemonize!' => \ my $daemonize,
)
or pod2usage();
$daemonize = 0 if ! defined $daemonize;
$tcp_port = 53505 if ! defined $tcp_port;
# Daemonization by default
#
if ( $daemonize ) {
close *STDIN;
close *STDOUT;
close *STDERR;
fork && exit;
fork && exit;
umask 0;
chdir '/';
}
# Launch socat to listen to TCP and launch screen-server-backend
#
require FindBin;
my $listen_spec = "TCP-LISTEN:${tcp_port},fork,reuseaddr";
if ( $bind_address ) {
$listen_spec .= ",bind=$bind_address";
}
my $bindir = $FindBin::Bin;
$bindir = $FindBin::Bin;
my $backend_spec = "EXEC:$bindir/tmux-server-backend";
if ( $socket_name ) {
$backend_spec .= " $socket_name";
}
$backend_spec .= ",setsid,nofork";
my @cmd = ( 'socat', $listen_spec, $backend_spec );
if ( $debug ) {
print STDERR "exec( @cmd )\n";
}
exec @cmd;
sub pod2usage {
require Pod::Usage;
goto &Pod::Usage::pod2usage;
}