Net::SSL ломает мою функцию Sys::SigAction timeout_call

После использования Sys::SigAction timeout_call для таймаутов из ответа в моем предыдущем вопрос (примечание: на этот раз я использую WWW::Mechanize вместо WWW::Mechanize::Timed), мои 60-секундные будильники работали правильно. И какое-то время я думал, что использую Crypt::SSLeay (Net::SSL) для SSL, но, посмотрев на него поближе, я понял, что код по какой-то причине использует Net::SSLeay (IO::Socket::SSL). Я думал, что WWW::Mechanize автоматически использует Crypt::SSLeay. Я заметил улучшение времени отклика (на 50% быстрее) для страниц SSL после того, как начал использовать Net::SSL. Но теперь мои 60-секундные тайм-ауты терпят неудачу, и время работы снова превышает 60 секунд! Если я уберу использование Net::SSL, то мои тайм-ауты Sys::SigAction (timeout_call) будут работать, но страницы SSL не будут загружаться так быстро. Итак, у меня есть два вопроса.

  1. Предоставляет ли Crypt::SSLeay (Net::SSL) более быстрый алгоритм SSL, чем Net::SSLeay (IO::Socket:SSL)?

  2. Как заставить мои тайм-ауты снова работать с Net::SSL? (Может быть, это компромисс, на который я должен решить?)

Код:

use Net::SSL
use WWW::Mechanize;
use HTTP::Cookies;
use Sys::SigAction qw(timeout_call);
use Time::HiRes qw(time); #also for use with sigaction?

my ($start_time, $end_time) = 0;

my $ua = WWW::Mechanize->new(
autocheck => 0, #turning off autocheck becuase any get errors will be fatal need to check for errors ourselves
ssl_opts => { verify_hostname => 0 } # if not set to 0 then Crypt::SSLeay will complain that it cant resolve hostnames
);

my $cookies = HTTP::Cookies->new(
autosave => 1
);

$ua->cookie_jar($cookies);

$ua->agent_alias("Windows IE 6");

if ( timeout_call( 60 ,sub { $start_time = time(); $ua->get('https://secure.site.com'); $end_time = time();} ))
{
   print "index page timed out\n" ;
   exit;
}

my $total_index_time = sprintf '%.3f', ($end_time - $start_time);

print "index load time: $total_index_time\n";

unless($ua->success){
   print "Error: " . $ua->status;
   exit;
}
...

модули, загруженные с использованием Net::SSL -

Склеп/SSLeay/CTX.pm

Склеп/SSLeay/X509.pm

Склеп/SSLeay.pm

Сеть/SSL.pm

Crypt/SSLeay/MainContext.pm

модули загружены без использования Net::SSL -

Сеть/SSLeay.pm

IO/Socket/SSL.pm

/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/randomize.al

/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/autosplit.ix


person Community    schedule 03.12.2012    source источник