2012-03-02 4 views
1

이 문제는 정말 나에게 당혹에 VM웨어 서버에서 작업하지만 실패 : 나는 다음 스크립트는 VM웨어 서버 2.0에서 작업 한 : 그것은 VM웨어 서버에서 잘 작동펄 스크립트는 VM웨어 ESXi를

#!/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; 
} 

. 나는 EXSi 서버에이 VM을 복제하지만 스크립트를 실행하는 가상 머신의 똑같은 복사본을 실행, 나는 다음과 같은 오류가 있습니다 :

정의되지 않은 값에 방법 "mcast_if"호출 할 수 없습니다

저는이 문제가 무엇인지 확신 할 수 없기 때문에 정말로 혼란 스럽습니다. 두 컴퓨터에서 실행되는 CPU를 제외하고는 다른 점이 전혀 없지만 저급 수준이 문제를 일으킬 수있는 방법을 모르지만 잘못 될 수 있습니다. perl -d는별로 도움이되지 못했습니다. 감사합니다. .

답변

3

소켓을 만드는 데 실패했습니다. 몇 가지 오류 검사를 사용하여 이유를 찾으십시오. 예 :

my $sock = IO::Socket::Multicast6->new(
    Proto=>"udp", 
    Domain=>AF_INET, 
    PeerAddr=>GROUP, 
    PeerPort=>PORT) 
    or die "Socket failed: $!"; 
+1

예, 완전히 도움이되었고 약간 당황했습니다. 이 VM 사용자는 경로가 포함 된 환경이므로 기본 GW를 프로덕션에 포함하지 않도록 재설정하는 스크립트를 가지고 있습니다. 이 VM에는 mcast 트래픽에 대한 경로가 없으므로 소켓을 만들지 못합니다. 빠른 답변 감사합니다. – salparadise

0

new() 생성자는 실패하지만 예외는 발생하지 않습니다. 나는 API를 모른다 : 이유를 말해 줄 수있는 방법이 있는가?

그렇지 않으면 errno (즉, $!)를 시도해보십시오.