Perl скрипт работает на сервере VMware, но не работает в VMware ESXi - PullRequest
1 голос
/ 02 марта 2012

Эта проблема действительно озадачивает меня: у меня есть следующий скрипт, работающий на vmware server 2.0:

#!/usr/local/bin/perl
# server (transmitter)
use strict;
use IO::Socket::Multicast6;
use IO::Interface;
use constant GROUP => "235.1.1.2";
use constant PORT  => "3000";
my $sock = IO::Socket::Multicast6->new(
                   Proto=>"udp",
                   Domain=>AF_INET,
                   PeerAddr=>GROUP,
                   PeerPort=>PORT);
$sock->mcast_if("eth1");
$sock->mcast_ttl(10);
while (1) {
   my $message = localtime();
   $sock->send($message) || die "Could not  send: $!";
} continue {
   sleep 4;
}

Отлично работает на сервере vmware. Я клонировал эту виртуальную машину на сервер EXSi, но выполняю ту же самую копию виртуальной машины, на которой выполняется сценарий, и получаю следующую ошибку:

Невозможно вызвать метод "mcast_if" для неопределенного значения

Я действительно озадачен этим, поскольку я не уверен, в чем может быть проблема. на самом деле ничто не отличается, за исключением того, что процессор работает на обеих машинах, но я не понимаю, как такой низкий уровень может вызвать проблемы, но я могу ошибаться. Perl -d не очень помог. Благодарю.

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Не удается создать сокет, используйте некоторую проверку ошибок, чтобы выяснить, почему. Например:

my $sock = IO::Socket::Multicast6->new(
   Proto=>"udp",
   Domain=>AF_INET,
   PeerAddr=>GROUP,
   PeerPort=>PORT)
   or die "Socket failed: $!";
0 голосов
/ 02 марта 2012

Конструктор new() не работает, но не вызывает исключение.Я не знаю его API: есть ли способ заставить его рассказать, почему?

В противном случае вы можете попробовать errno (то есть $!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...