1use strict; 2use warnings; 3use IO::Socket::SSL; 4do './testlib.pl' || do './t/testlib.pl' || die "no testlib"; 5 6$|=1; 7print "1..15\n"; 8 9# first use SSL client 10{ 11 my ($server,$saddr) = create_listen_socket(); 12 ok(1, "listening \@$saddr" ); 13 my $srv = fork_sub( 'server',$server ); 14 close($server); 15 fd_grep_ok( 'Waiting', $srv ); 16 my $cl = fork_sub( 'client_ssl',$saddr ); 17 fd_grep_ok( 'Connect from',$srv ); 18 fd_grep_ok( 'Connected', $cl ); 19 fd_grep_ok( 'SSL Handshake OK', $srv ); 20 fd_grep_ok( 'Hi!', $cl ); 21} 22 23# then try bad non-SSL client 24if ( $^O =~m{mswin32}i ) { 25 # skip 26 ok( 1, "skip - TODO on win32" ) for(1..7); 27} else { 28 my ($server,$saddr) = create_listen_socket(); 29 ok(1, "listening \@$saddr" ); 30 my $srv = fork_sub( 'server',$server ); 31 close($server); 32 fd_grep_ok( 'Waiting', $srv ); 33 my $cl = fork_sub( 'client_no_ssl',$saddr ); 34 fd_grep_ok( 'Connect from',$srv ); 35 fd_grep_ok( 'Connected', $cl ); 36 fd_grep_ok( 'SSL Handshake FAILED', $srv ); 37} 38 39 40sub server { 41 my $server = shift; 42 print "Waiting\n"; 43 my $client = $server->accept || die "accept failed: $!"; 44 print "Connect from ".$client->peerhost.':'.$client->peerport."\n"; 45 if ( IO::Socket::SSL->start_SSL( $client, SSL_server => 1, Timeout => 5 )) { 46 print "SSL Handshake OK\n"; 47 print $client "Hi!\n"; 48 } else { 49 print "SSL Handshake FAILED - $!\n" 50 } 51} 52 53sub client_no_ssl { 54 my $saddr = shift; 55 my $c = IO::Socket::INET->new( $saddr ) || die "connect failed: $!"; 56 print "Connected\n"; 57 while ( sysread( $c,my $buf,8000 )) {} 58} 59 60sub client_ssl { 61 my $saddr = shift; 62 my $c = IO::Socket::SSL->new( $saddr ) || die "connect failed: $!|$SSL_ERROR"; 63 print "Connected\n"; 64 while ( sysread( $c,my $buf,8000 )) { print $buf } 65} 66 67 68