|
|
|
@ -46,9 +46,9 @@ setrlimit(RLIMIT_NOFILE, 8000, 8000);
|
|
|
|
|
|
|
|
|
|
$PROTOS and $PROTOS = [split(/\s*[,;:]+\s*/, $PROTOS)];
|
|
|
|
|
$PROTOS && @$PROTOS == 1 and $$PROTOS[1] = $$PROTOS[0];
|
|
|
|
|
$DEST and $DEST = [split(/:/, $DEST)];
|
|
|
|
|
$$DEST[0] or $$DEST[0] = '127.0.0.1';
|
|
|
|
|
$$DEST[1] or $$DEST[1] = 2223;
|
|
|
|
|
$DEST and $DEST = [$DEST =~ /^(?:([a-z.-]+)(?::(\d+))?|([\d.]+)(?::(\d+))?|([\da-f:]+)|\[([\da-f:]+)\]:(\d+))$/si];
|
|
|
|
|
my $dest_host = $$DEST[0] || $$DEST[2] || $$DEST[4] || $$DEST[5] || 'localhost';
|
|
|
|
|
my $dest_port = $$DEST[1] || $$DEST[3] || $$DEST[6] || 2223;
|
|
|
|
|
$SUITES and $SUITES = [split(/\s*[,;:]+\s*/, $SUITES)];
|
|
|
|
|
|
|
|
|
|
my @chrs = ('a' .. 'z', 'A' .. 'Z', '0' .. '9');
|
|
|
|
@ -78,8 +78,14 @@ sub msg {
|
|
|
|
|
return $r ? bdecode($r, 1) : undef;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
socket($fd, AF_INET, SOCK_DGRAM, 0) or die $!;
|
|
|
|
|
connect($fd, sockaddr_in($$DEST[1], inet_aton($$DEST[0]))) or die $!;
|
|
|
|
|
my @dests = getaddrinfo($dest_host, $dest_port, AF_UNSPEC, SOCK_DGRAM);
|
|
|
|
|
while (@dests >= 5) {
|
|
|
|
|
my ($fam, $type, $prot, $addr, $canon, @dests) = @dests;
|
|
|
|
|
socket($fd, $fam, $type, $prot) or undef($fd), next;
|
|
|
|
|
connect($fd, $addr) or undef($fd), next;
|
|
|
|
|
last;
|
|
|
|
|
}
|
|
|
|
|
$fd or die($!);
|
|
|
|
|
|
|
|
|
|
msg({command => 'ping'})->{result} eq 'pong' or die;
|
|
|
|
|
|
|
|
|
|