2010-06-11 174 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