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