here my server code:
use threads;
#!/usr/bin/perl
use POSIX ":sys_wait_h";
use IO::Socket::SSL;
use IO::Handle;
use Time::Local;
use DBI;
my ($sock, $s, $v_mode);
unless (@ARGV == 1) { die "usage: perl $0 <Port Number>" };
($port) = @ARGV;
# Check to make sure that we were not accidentally run in the wrong^M
# directory:^M
unless (-d "certs") {
if (-d "../certs") {
chdir "..";
} else {
die "No CA Certs\n";
}
}
if(!($sock = IO::Socket::SSL->new( Listen => 10,
LocalPort => $port,
Proto => 'tcp',
ReuseAddr => 1,
SSL_verify_mode => 0x01,
SSL_use_cert => 1,
SSL_passwd_cb => sub {return
"haha"},
SSL_key_file =>
'certs/server_key.pem',
)) ) {
warn "unable to create socket: ", &IO::Socket::SSL::errstr, "\n";
exit(0);
}
warn "SSL socket created: $sock.\n";
#run as daemon
chdir '/' or die "Can't chdir to /: $!";
umask 0;
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, '>>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
warn "waiting for next connection......\n";
sub handle_connection{
$dbh = DBI->connect("DBI:mysql:testing", "root",
'!@#zxc'),{RaiseError => 1, AutoCommit => 0} || die ("Cannot connect to
database");
$outpath = "/home/extol/heartbeat_testing/alert.log";
$s = shift;
$output = shift || $s;
$exit = 0;
my ($peer_cert, $subject_name, $issuer_name, $date, $str);
if( ! $s ) {
warn "error: ", $s->errstr, "\n";
$exit = 1;
break;
}
while(<$s>){
if( ref($s) eq "IO::Socket::SSL" && $s->connected()) {
$subject_name =
$s->peer_certificate("subject");
$issuer_name = $s->peer_certificate("issuer");
if($_ =~ /MRTG ([\d.]+) (\w+) (\d+) (\d+) (\d+)
(\d+) (\d+) (\d+)/)
{
# here the program wil process the
log and save into database
...................
}
else{
$exit = 1;
}
last if $exit;
}
$dbh->disconnect;
}
while(1){
while(($s = $sock->accept())) {
$s->autoflush(1);
$thread = threads->create(\&handle_connection, $s);
$id = $thread->tid();
print "the thread id is $id\n";
$thread->detach;
}
}