MT#10583 support ipv6 control connection in simulator

pull/69/head
Richard Fuchs 10 years ago
parent caba5be677
commit 6e32379cab

@ -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;

Loading…
Cancel
Save