我有一个使用cpan模块HTTP::AppServer的http服务器。
我可以使用127.0.0.1
或localhost
连接到我的服务器,而::1
则可能会失败。
以下是curl的一些示例:
$ 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并将模块Socket升级到找到的here版本,以使IO :: Socket :: IP正常工作。
仍然,它不起作用。
答案 0 :(得分:0)
尝试使用比5.14更新的Perl版本。
答案 1 :(得分:0)
如果这不起作用,则可能是IO::Socket::IP
或HTTP::AppServer
中某处的错误。你可以把它作为IO::Socket::IP
上的RT错误发送给我,我会看看它。
答案 2 :(得分:0)
在LeoNerd说IO :: Socket :: IP在这种情况下无法帮助我之后,我找到了另一种解决方案,虽然这个解决方案只适用于某些perl版本。
HTTP :: AppServer基于HTTP :: Server :: Simple,我在cpan上找到了支持ipv6的第二个模块的更新版本。
首先,您需要在此处下载较新版本的HTTP :: Server :: Simple:
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;
}
不幸的是,这回答了这个问题,但不是我的问题,因为它不能与perl 5.8.8一起使用,也可以将Socket.pm升级到最新版本。