2017-12-10 1 views
2

나는 IO::Async::Loop::EV 사용 Net::Async::HTTP로 GET 요청을하고 있어요 : 사용하는 경우왜이 Perl Net :: Async :: HTTP 경고가 표시됩니까? 이 과도하게 단순화 스크립트에서

EV: error in callback (ignoring): Can't call method "sysread" on an undefined value at .../IO/Async/Stream.pm line 974 

나는이 경고를 얻을 :

use Modern::Perl '2017'; 
use IO::Async::Loop::EV; 
use Net::Async::HTTP; 
use Future; 

my $loop = IO::Async::Loop::EV->new; 
my $http = Net::Async::HTTP->new(max_redirects => 0); 
$loop->add($http); 

my $f = $http->GET('https://www.perl.org') 
->then(sub { 
     my $response = shift; 
     printf STDERR "got resp code %d\n", $response->code; 
     return Future->done; 
    }); 
$http->adopt_future($f->else_done); 

$loop->run; 

나는이 몇 번 경고를받을 IO::Async::Loop::Event (다시 IO::Async::Stream, 974 행).

그러나 보안되지 않은 (http) 링크의 경우 모두보기 좋습니다. 그래서 뭔가가 아마도 IO::Async::SSL으로 잘못되었을 것입니다. (나는 다른 컴퓨터에서 이것을 시도해 보았지만 다른 경고 메시지를 받았다.)

경고를 여러 번 표시하는 이유는 무엇입니까? 그것은 당신의 기계에서도 발생합니까?

+1

에서 IO :: 비동기 :: 루프 :: EV에 대한 버그로이 문제를 제기했다? – choroba

+0

@choroba 편집 됨. 경고 : IO :: Async :: Stream의 974 행에 있습니다. –

답변

0

이 경고는 IO::Async::Loop::EV 구현에만 해당됩니다. 방금

use IO::Async::Loop; 
my $loop = IO::Async::Loop->new; 

이면 제대로 작동하는 것 같습니다. 특정 목적을 위해 그것을 선택하지 않는 한, 그것을 피하는 것이 가장 좋으며 IO::Async::Loop->new 마법 생성자가 좋은 것을 찾도록하는 것이 가장 좋습니다.

또한,

$loop->run 

으로 스크립트를 종료하기보다는 대신 그 Future이 완료 될 때까지 그래서 블로킹 대기를 수행

$f->get 

을 사용할 수 있지만 다음하지 않도록, 이후 정상적으로 종료 중단하려면 <Ctrl-C>해야합니다.


경고 파일 이름과 줄 번호를 생략합니까 내가 https://rt.cpan.org/Ticket/Display.html?id=124030

관련 문제