Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - maxgromov

Страницы: [1]
1
Perl / Perl. IO::Select разница между win/bsd
« : 05 Апреля 2007, 19:29:09 »
Есть небольшой кусок кода, который разом проверяет набор 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 заполняется всеми остальными, кроме нужного адреса.. Т.е. работает как-то не логично.  Почему так и как заставить работать правильно?  :(

Страницы: [1]