2012-07-11 71 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