2011-04-11 58 views
0

我有从IO/Socket.pm上或周围线251Perl的IO ::插座 - 无法确定等地址

croak 'send: Cannot determine peer address' 
    unless($peer); 

基本上我们打开连接起来,并且将数据发送到所产生的问题它。出于某种原因10-20秒后,这个错误会被抛出。

发送:无法确定等地址

任何想法?

#!/usr/bin/perl 

package Dialer; 

use Data::Dumper; 
use IO::Socket; 

$sock = IO::Socket::INET->new(PeerAddr => '255.255.255.255', 
           PeerPort => '5038', 
           Proto => 'tcp'); 

$res = $sock->send("Action: Login\r\nUsername: dunzo\r\nSecret: 123456789\r\nEvents: \r\n\r\n"); 
sleep(5); 


while(1==1) { 
     $res = $sock->send("Action: Originate\r\nChannel: Local/[email protected]\r\nExten: 123123\r\nContext: dunzo\r\nTimeout: 60000\r\nVariable: \r\nAsync: yes\r\nCallerID:    
1234567890\r\nPriority: 1\r\n\r\n"); 
     $incr++; 
     sleep(1); 
     print $incr."\n"; 
} 
+1

TCP或UDP?连接(构造函数中的PeerAddr)还是不连接?你传递给“发送”的参数是什么? – ikegami 2011-04-11 20:26:53

+1

拜托,你能否粘贴你的脚本(当然是相关的部分) – 2011-04-11 20:41:46

回答

0
$sock = IO::Socket::INET->new(PeerAddr => '255.255.255.255', 
          PeerPort => '5038', 
          Proto => 'tcp'); 

对于TCP协议,255.255.255.255不是有效的单播IP地址。在这种情况下,IO :: Socket :: INET将255.255.255.255视为域名。它将通过主机名称255.255.255.255查询您的DNS服务器来请求IP地址。显然没有这样的记录,DNS查询操作将超时。这就是为什么10到20秒后出现错误的原因。