2010-06-11 121 views
1

当我运行下面的代码时,执行只是挂在那里,根本没有响应。 你们有没有人可以告诉我示例代码有什么问题?无法使用IO创建套接字::套接字

use strict; 
use warnings; 
use IO::Select; 
use IO::Socket; 

my $s = new IO::Socket (
          LocalPort => 8889, 
          Proto => 'tcp', 
          Listen => 16, 
          Reuse => 1 
        ); 

die "could not create socket $!\n" unless $s; 
+0

你的意思是什么,“只是挂在那里”?你观察到什么症状?当我运行上面的代码(在5.8或5.10下)时,我得到'new'构造函数抛出的一个致命异常:'IO :: Socket:无法在bad-socket.pl第8行配置通用套接字' – pilcrow 2010-06-11 18:56:18

回答

5

如果您为IO :: Socket构造函数提供参数,它需要一个Domain参数。查看完整源代码here,特别是如果您提供参数,则从构造函数调用的configure子例程。

sub new { 
    ... 
    return scalar(%arg) ? $sock->configure(\%arg) 
     : $sock; 
} 

sub configure { 
    my($sock,$arg) = @_; 
    my $domain = delete $arg->{Domain}; 

    croak 'IO::Socket: Cannot configure a generic socket' unless defined $domain; 
    .... 
} 

也许你正在考虑IO :: Socket :: INET?

1

示例代码有什么问题?

IO::Socket是Perl套接字的通用超类。您需要将IO::Socket替换为IO::Socket::INET

+0

btw,do我一直都在犯同样的错误。 – Dummy00001 2010-06-11 21:05:11