2012-07-11 70 views
0

我有一個http服務器,它使用cpan中的模塊HTTP::AppServer如何爲HTTP :: AppServer添加ipv6支持?

我可以連接到我的服務器使用127.0.0.1localhost,而它的悲慘失敗與::1

這裏有一些例子,捲曲:

$ curl http://127.0.0.1:8080/index.html 
This is a test. 
$ curl -g http://[::1]:8080/index.html 
curl: (7) couldn't connect to host 

這是服務器的啓動方式:

use HTTP::AppServer; 
use IO::Socket::IP -register; 

    my $server = HTTP::AppServer->new(StartBackground => 0, ServerPort => 8080); 

    $server->plugin('FileRetriever', DocRoot => '/tmp'); 

    $server->start; 

其實這是一個複雜得多。但是我不認爲劇本的其餘部分都是必要的。我已經添加了模塊IO::Socket::IP並將模塊套接字升級到找到的版本here以使IO :: Socket :: IP工作。

不過,它不起作用。

回答

0

LeoNerd說,IO ::插座:: IP不能幫我在這種情況下,我找到了一個替代的解決方案,雖然該方案僅適用於一些Perl版本。

HTTP :: AppServer基於HTTP :: Server :: Simple,我在cpan上發現了支持ipv6的第二個模塊的更新版本。

所有你需要在這裏下載HTTP ::服務器的新版本::簡單的第一步:

http://metacpan.org/pod/HTTP::Server::Simple

正如你所看到的,它有不同的new方法接受一個新的說法family

現在你必須採取HTTP :: AppServer.pm和修改init功能從

sub init 
{ 
    my ($self, %opts) = @_; 

    # server options defaults 
    my %defaults = (StartBackground => 0, ServerPort => 3000); 

    # set options or use defaults 
    map { $self->{$_} = (exists $opts{$_} ? $opts{$_} : $defaults{$_}) } 
     keys %defaults; 

    $self->{'server'} = HTTP::AppServer::Base->new($self->{'ServerPort'}); 

    return $self; 
} 

sub init 
{ 
    my ($self, %opts) = @_; 

    # server options defaults 
    my %defaults = (StartBackground => 0, ServerPort => 3000); 

    # set options or use defaults 
    map { $self->{$_} = (exists $opts{$_} ? $opts{$_} : $defaults{$_}) } 
     keys %defaults; 

    $self->{'server'} = HTTP::AppServer::Base->new($self->{'ServerPort'}, Socket::AF_INET6); 

    return $self; 
} 

不幸的是,這個回答這個問題,但不是我的問題,因爲它並不適用於將Socket.pm升級到最新版本的perl 5.8.8。

0

嘗試使用比5.14更新的Perl版本。

http://www.perl.org/about/whitepapers/perl-ipv6.html

+0

對不起,我不能。我的軟件將運行在仍然具有perl 5.8.8的機器上。我必須保證與perl版本的兼容性。 – Zagorax 2012-07-11 23:09:28

+0

我編輯了我的代碼來使用IO :: Socket :: IP,但它仍然不會偵聽ipv6地址。 – Zagorax 2012-07-12 08:28:12

0

如果不工作,它可在任一IO::Socket::IPHTTP::AppServer某處的錯誤。你可以把它發送給我作爲一個RT問題IO::Socket::IP,我會看看它。

https://rt.cpan.org/Dist/Display.html?Queue=IO-Socket-IP

+0

完成。我還爲您提供了一個最小的可運行應用程序。所以你可以擁有所有文件。非常感謝你。 – Zagorax 2012-07-12 17:41:14

+0

謝謝,我來看看。 – LeoNerd 2012-07-15 10:48:19