2016-05-02 2 views
1


Ниже код выдает ошибку на Windows 7 Pro, он читает 5-8K байт веб-страницы, а затем завершает:«Неблокирующая операции сокета» ошибка в LWP :: UserAgent пакет Perl

use strict; 
use LWP::UserAgent; 
my $url = 'https://www.flickr.com/photos/[email protected]/26176178323/'; 
my $ua = LWP::UserAgent->new; 
my $res = $ua->get($url); 
print $res->headers->as_string; 

ошибка:

X-Died: read failed: A non-blocking socket operation could not be 
completed immediately. at C:/Perl/lib/LWP/Protocol/http.pm line 467. 

ОС: Win 7 Pro (64bit)
Perl: 5.20.1 (32-разрядная)
LWP: 6,08
LWP-Протоколы-https: 6.06

Любые идеи, почему это не работает, и как это можно исправить?

Спасибо.

+0

Я не знаю, насколько это полезно, но: ваш код работает для меня на CentOS 7, v5.16. Он печатает три строки заголовков, никаких предупреждений или ошибок. Таким образом, это может иметь какое-то отношение к некоторому пакету вашей системы. (Кстати, я бы предположил, что вы добавляете 'использование предупреждений'.) – zdim

+0

(Непосредственной причиной ошибки является' sysread' в сокете, возвращающем 'EWOULDBLOCK') – ikegami

ответ

1

Эта проблема, вероятно, связана с проверкой только на EAGAIN, а не EWOULDBLOCK. Эти коды ошибок одинаковы для большинства UNIX, но в Windows они разные. Я рекомендую использовать более новую версию LWP (по крайней мере, версию 6.09), потому что она явно занимается этой проблемой и проверяет оба условия.

0

Сам объект ActivePerl (с его устаревшим пакетом LWP) является виновником.
Перешел на Клубничный Perl, и он работает как шарм.
Dumping ActivePerl ...

Смежные вопросы