#!/usr/bin/perl use strict; use IO::Socket::INET; our $spam_amount = 10; # per instance our $ham_amount = 10; # per instance our $concruency = 50; #### $SIG{CHLD} = sub { wait }; my $total_mails = $concruency * ($spam_amount + $ham_amount); print "sending $total_mails\n"; our @pids; my $pid; for(my $i = 0; $i < $concruency; $i++) { if(($pid = fork) < 0) { print "fork failed\n"; next; } # child if(!($pid)) { my $sock = new IO::Socket::INET->new( PeerPort => 12525, Proto => 'tcp', PeerAddr => '127.0.0.1' ) or die $!; send_policy(\$sock); exit 0; } # parent elsif($pid && ($pid > 0)) { $pids[$i] = $pid; } } foreach my $waitpid (@pids) { if($waitpid > 0) { waitpid($waitpid, 0); } } sub send_policy { my $sock = shift; # get socket reference my $c = 0; my $inst_total = $spam_amount + $ham_amount; my $buf; while($c < $inst_total) { my $spam_string = "helo_name=".$$."-".$c.".google.de client_address=12.3.4.5 sender=foo\@".$$."-".$c.".yahoo.de request=smtpd_access_policy\n "; my $ham_string = "helo_name=robtone.ek-muc.de sender=foo\@".$$."-".$c.".ek-muc.de client_address=62.225.182.35 request=smtpd_access_policy\n "; $$sock->send($spam_string); $$sock->recv($buf, 1024); $$sock->send($ham_string); $$sock->recv($buf, 1024); $c = $c + 2; } }