|
|
|
|
@ -19,9 +19,17 @@ my $fd;
|
|
|
|
|
sub msg {
|
|
|
|
|
my ($l) = @_;
|
|
|
|
|
my $cookie = $$ . '_' . rand_str(10);
|
|
|
|
|
send($fd, "$cookie $l", 0) or die $!;
|
|
|
|
|
my $r;
|
|
|
|
|
recv($fd, $r, 0xffff, 0) or die $!;
|
|
|
|
|
while (1) {
|
|
|
|
|
send($fd, "$cookie $l", 0) or die $!;
|
|
|
|
|
my $err = '';
|
|
|
|
|
alarm(1);
|
|
|
|
|
recv($fd, $r, 0xffff, 0) or $err = "$!";
|
|
|
|
|
alarm(0);
|
|
|
|
|
$err =~ /interrupt/i and next;
|
|
|
|
|
$err and die $err;
|
|
|
|
|
last;
|
|
|
|
|
}
|
|
|
|
|
$r =~ s/^\Q$cookie\E +//s or die $r;
|
|
|
|
|
$r =~ s/[\r\n]+$//s;
|
|
|
|
|
return $r;
|
|
|
|
|
@ -60,9 +68,11 @@ for my $iter (1 .. 1000) {
|
|
|
|
|
my ($a, $b) = @$i;
|
|
|
|
|
send($$fds[$a], 'rtp', 0, sockaddr_in($$outputs[$b][0], inet_aton($$outputs[$b][1]))) or die $!;
|
|
|
|
|
my $x;
|
|
|
|
|
my $err = '';
|
|
|
|
|
alarm(1);
|
|
|
|
|
recv($$fds[$b], $x, 0xffff, 0) or die $!;
|
|
|
|
|
recv($$fds[$b], $x, 0xffff, 0) or $err = "$!";
|
|
|
|
|
alarm(0);
|
|
|
|
|
$err && $err !~ /interrupt/i and die $err;
|
|
|
|
|
$x eq 'rtp' or die $x;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|