Perl IO :: Socket - 无法确定对等地址

时间:2011-04-11 20:16:10

标签: perl

我遇到了来自第251行或附近的IO / Socket.pm的问题。

    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/123123@dunzodial\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 个答案:

答案 0 :(得分: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秒后出错的原因。