Avatar billede bba Nybegynder
15. juni 2004 - 10:59 Der er 3 kommentarer

Threads i perl

Hvordan benytter man tråde i perl

Jeg har en SMTP lisner på port 25, men hvis den modtager for store mails kan der ikke komme andre igennem, derfor ønskes en ny tråd opstartet når den første process er optaget.

/BBA

#kode start#
  use Net::SMTP::Server;
  use Net::SMTP::Server::Client;

      $server = new Net::SMTP::Server('10.0.0.2', 25,)||
        croak("Unable to handle client connection: $!\n");
system('CLS'); # clear screen
print "--- SMTP Waiting for mail ---\n"; # just printout for information

      while($conn = $server->accept()) {

        my $client = new Net::SMTP::Server::Client($conn) ||
            croak("Unable to handle client connection: $!\n");

        $client->process;

my $from = $client->{FROM};
my $to  = $client->{TO};
my $msg  = $client->{MSG};

print length($msg);

if (length($msg > 10))
{print "For stor mail !!\n"}

print "incoming message ... \n";
print "DATA : $msg \n";
#kode slut#
Avatar billede mfalck Praktikant
15. juni 2004 - 11:06 #1
dette kan måske give en ide om hvordan man laver non-blocking io i perl:

http://iis1.cps.unizar.es/Oreilly/perl/advprog/ch12_03.htm
Avatar billede xohp Nybegynder
09. juni 2005 - 10:42 #2
er ikke helt sikker på at det virker, det kender jeg ikke Net::SMTP::Server godtnok til at kunne sige, det kommer an på hvornår den blocker, men jeg har da et forslag som du kan afprøve.
Det lader lidt til at den while ikke er blevet lukket, anyway du laver din while

while($rconn = $server->accept()) {
  if (!fork()) { &MailReceived($rconn); }
}

og så tager du alt det der stod i din while loop og smider i en sub kaldet MailReceived.

sub MailReceived {
  my $conn = shift;

  my $client = new Net::SMTP::Server::Client($conn) ||
              croak("Unable to handle client connection: $!\n");
  $client->process;
  # ... osv ...
}
Avatar billede xohp Nybegynder
09. juni 2005 - 10:45 #3
hov, glemte lige noget...

while($rconn = $server->accept()) {
  if (!fork()) {
    &MailReceived($rconn);
    exit(0);
  }
}

ellers kører trådende videre efter at den har behandlet den modtagne mail
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester