Есть небольшой кусок кода, который разом проверяет набор IP адресов на "живучесть":
my (@addr, $sAddr, $sPort, @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) {
($sAddr, $sPort) = ($1,$2);
my $addr = sockaddr_in($sPort,inet_aton($sAddr));
$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 заполняется всеми остальными, кроме нужного адреса.. Т.е. работает как-то не логично. Почему так и как заставить работать правильно?