Есть небольшой кусок кода, который разом проверяет набор IP адресов на "живучесть":my (@addr, @socks, $s);
@addr = ('127.0.0.1:8888', '127.0.0.1:8887', '127.0.0.1:8886', '127.0.0.1:8885', '127.0.0.1:8884', '87.250.251.8:80');
$s = IO::Select->new;
foreach my $address (@addr) {
push(@socks, IO::Socket::INET->new(Proto => 'tcp', Type => SOCK_STREAM));
$socks[$#socks]->blocking(0);
if ($address=~/(.+):(.+)/i) {
my $addr = sockaddr_in($2,inet_aton($1));
$socks[$#socks]->connect($addr);
$s->add($socks[$#socks]);
}
}
if (my @tmp = $s->can_write(5)) {
foreach (@tmp) {
my ($a,$b) = ($_->peerhost,$_->peerport);
print "Good One: $a:$b!\n";
$_->close;
}
}
Он прекрасно работает под виндой определяя единственный живой адрес (последний в массиве), но при попытке выполнить тот же код под fbsd массив @tmp заполняется всеми остальными, кроме нужного адреса.. Почему так и как заставить работать правильно?