use strict; use warnings; package Server; use IO::Socket::SSL; use Storable qw(nstore_fd); use Data::Dumper; unless (-d "certs") {    if (-d "../certs") {        chdir "..";    } else {        die "Please run this example from the IO::Socket::SSL distribution directory!\n";    } } sub run {   my $socket = IO::Socket::SSL->new(      Listen => 5,      LocalAddr => 'localhost',      LocalPort => 9000,      Proto     => 'tcp',      Reuse     => 1,      SSL_verify_mode => 0x01,      SSL_passwd_cb => sub {return "bluebell"},   ) or die "server: can't open socket over port 9000";   warn "server initialized\n";   while (my $client = $socket->accept()) {      chomp (my $request = <$client>);      next unless $request;      warn "client request: $request\n";      my %hash = (a=>1,b=>2,c=>3);      nstore_fd(\%hash, $client) or die $!;      close($client);      close($socket);   } } package Client; use IO::Socket::SSL; use Storable qw(fd_retrieve); use Data::Dumper; sub run {   my $socket = IO::Socket::SSL->new(      PeerAddr => 'localhost',      PeerPort => '9000',      Proto    => 'tcp',      SSL_use_cert => 1,      SSL_verify_mode => 0x01,      SSL_passwd_cb => sub { return "opossum" }   ) or die "client: can't connect to 127.0.0.1:9000";   warn "client connected to server\n";   print $socket "hash\n";   my $data = fd_retrieve($socket) or die $!;   warn Dumper($data);   close($socket); } 1; if (my $pid = fork) {   run Server;   waitpid($pid,0); } else {   sleep 1;   run Client; }