#!/usr/bin/perl use strict; use warnings; use Test::More; my @uris = qw( debianforum.de perldition.org ); @uris = split(/:/, $ENV{SSLEAY_URIS}) if exists $ENV{SSLEAY_URIS}; if (@uris) { plan tests => scalar @uris * 2; } else { plan skip_all => 'No external hosts specified for SSL testing'; } use File::Spec; use Symbol qw(gensym); use Net::SSLeay::Handle; # On some platforms, such as Solaris, the act of resolving the host name # opens (and leaves open) a connection to the DNS client, which breaks # the fd counting algorithm below. Make sure the DNS is operating before # we count the FDs for the first time. for my $uri (@uris) { my $dummy = gethostbyname($uri); } my $fdcount_start = count_fds(); for my $uri (@uris) { { my $ssl = gensym(); tie(*$ssl, "Net::SSLeay::Handle", $uri, 443); print $ssl "GET / HTTP/1.0\r\n\r\n"; my $response = do { local $/ = undef; <$ssl> }; like( $response, qr/^HTTP\/1/s, 'correct response' ); } my $fdcount_end = count_fds(); is ($fdcount_end, $fdcount_start, 'handle gets destroyed when it goes out of scope'); } sub count_fds { my $fdpath = File::Spec->devnull(); my $fh = gensym(); open($fh, $fdpath) or die; my $count = fileno($fh); close($fh); return $count; }