Hallo!
Icher beschäftige mich seit geraumer Zeit (seit gestern ;) damit, ein pop3-Server in Perl zu programmieren. Das funktioniert in Ansätzen auch schon ganz gut (ich kann bereits mit meinem eMail-Prog - The Bat! - eMails abrufen).
Allerdings gibts nun ein Problem:
Wenn ich mit Telnet den Server blockiere kann ich nicht mehr mit einem anderen Programm drauf zugreifen. Es müßte doch aber möglich sein, das der einer eingehenden Verbindung eine Subroutine zuweist, und dann weiter auf eingehende Verbindungen wartet, während der andere Client abgefertigt wird.
Kennt sich da jemand aus?
Viele Grüße
Maik Görgens
P.S.: ich poste mal mein bisheriges Skript hierhin:
#################################
use IO::Socket;
$server = new IO::Socket::INET (
LocalPort => 110,
Listen => $SOMAXCONN,
Proto => 'tcp',
Reuse => 1);
while ($client = $server->accept())
{
select($client);
$|=1;
select(STDOUT);
print $client "+OK\r\n";
$user = <$client>;
print $client "+OK\r\n";
$pass = substr(<$client>,5,length($pass)-2);
if($pass eq "passwort") { print $client "+OK\r\n"; }
else { print $client "+ERR\r\n"; next; }
while(<$client>)
{
$comm = $_;
$comm = substr($comm,0,length($comm)-2);
if($comm =~ m/STAT/) { print $client "+OK 2 500\r\n"; }
elsif($comm =~ m/LIST/) { print $client "+OK\r\n1 50\r\n2 450\r\n.\r\n"; }
elsif($comm =~ m/RETR/) { print $client "+OK\r\nFrom: me@home\r\nTo: you@home\r\nSubject: hi\r\n\r\nhihihi.\n\n\nhihihi\r\n.\r\n"; }
elsif($comm =~ m/DELE/) { print $client "+OK\r\n"; }
elsif($comm =~ m/QUIT/) { print $client "+OK\r\n"; }
}
}
#################################