2012-03-02 142 views
1

這個問題實在令人費解對我說:我曾經的VMware Server 2.0上工作下面的腳本:perl腳本在VMware Server的工作,但未能VMware 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; 
} 

它的工作原理的VMware服務器上的偉大。我已經克隆此虛擬機到服務器EXSi但在運行虛擬機完全相同的副本運行該腳本,我得到以下錯誤:

不能調用一個未定義值法「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

是的,這完全有幫助,我有點尷尬。這個虛擬機有一個腳本,可以重置路由,使其不包含缺省的GW,因爲它是一個包含的環境。由於該虛擬機沒有mcast通信的路由,因此無法創建套接字。感謝您及時的回覆。 – salparadise 2012-03-02 01:07:35

0

構造函數new()失敗,但不引發異常。我不知道它的API:有沒有辦法讓它告訴你爲什麼?

否則,您可能會嘗試errno(即,$!)。