2012-07-11 4 views
0

나는 cpan에서 모듈 HTTP::AppServer을 사용하는 http 서버를 가지고 있습니다.HTTP :: AppServer에 ipv6 지원을 어떻게 추가합니까?

127.0.0.1 또는 localhost을 사용하여 서버에 연결할 수 있으며, 이는 비참하게도 ::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 모듈을 추가하고 IO300 :: Socket :: IP를 작동시키기 위해 소켓 Socket을 버전 here으로 업그레이드했다.

그래도 작동하지 않습니다.

답변

0

은 IO :: 소켓 :: IP가이 상황에서 나를 도울 수 없다는 LeoNerd 후, 나는 대안 해결책을 발견했습니다.

HTTP :: AppServer는 HTTP :: Server :: Simple을 기반으로하며 ipv6을 지원하는이 두 번째 모듈의 최신 버전 cpan에서 발견되었습니다.

당신이 여기 HTTP :: 서버의 최신 버전 :: 간단한을 다운로드 할 필요가 모든

첫째 :

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

당신이 볼 수 있듯이, 그것은 새로운 인수를 다른 new 방법을 받아 들일 것을 family .

이제 당신은 불행하게도,이 질문에 대답

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; 
} 

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; 
} 

에서 init 기능을 HTTP : AppServer.pm을 수정해야하지만, 나의 문제는 그것 때문에 perl 5.8.8에서는 Socket.pm을 최신 버전으로 업그레이드 할 수 없습니다.

0

5.14보다 새로운 Perl 버전을 사용해보십시오. 그래도 문제가 해결되지 않으면

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

+0

죄송합니다. 죄송합니다. 내 소프트웨어는 아직 펄 5.8.8이있는 머신에서 실행될 것입니다. 그 perl 버전과의 호환성을 보장해야합니다. – Zagorax

+0

IO :: Socket :: IP를 사용하기 위해 코드를 편집했지만 여전히 ipv6 주소에서 수신 대기하지 않습니다. – Zagorax

0

, 그것은 IO::Socket::IP 또는 HTTP::AppServer 중 어딘가에 버그가있을 수 있습니다. IO::Socket::IP에 RT 버그로 보내 주시면 자세히 살펴 보겠습니다. 이 솔루션은 약간의 펄 버전에서만 작동하지만

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

+0

완료. 또한 최소한의 실행 가능한 응용 프로그램을 제공했습니다. 따라서 모든 파일을 보유 할 수 있습니다. 고맙습니다. – Zagorax

+0

고마워, 내가 살펴볼 게. – LeoNerd

관련 문제