Hi,
ich habe einen Server mit Net::Server in Perl programmiert (SMTP-Server). Am Ende soll die Mail an ein PHP Script übergeben werden:
if(open(PIPE, "|/usr/bin/php -q /home/patrick/pipe.php")) {
print PIPE @mail;
close(PIPE);
}
Geht soweit gut, nur das die Verbindung zum Server genau bei "close(PIPE)" beendet wird. Der Hauptserver läuft weiter, nur das Verbindubgs-Child ist einfach beendet. Wenn ich das "close(PIPE)" weglasse, beendet sich die Verbindung nicht, aber das Pipe bleibt offen, das will ich ja nicht.
Woran liegt das? Mache ich etwas falsch? Was?
Patrick
User since
2003-08-08
2561
Artikel
HausmeisterIn
He?
Einerseits willst du die Pipe wieder schließen, anderer seits soll sie offen bleiben? Wie soll ich das verstehen?
Gruß, Erik!
s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}
It's not a bug, it's a feature! - [CGI-World.de]
User since
2003-08-04
2536
Artikel
ModeratorIn
<gröhl>code posten! code posten!</gröhl>
eb: er will die pipe schließen, aber die verbindung, deren code er uns vorenthalten hat, aufrecht erhalten...
User since
2004-04-13
6
Artikel
BenutzerIn
Sieht im Prinzip so aus, der Code:
#!/usr/bin/perl
package b1gMTA;
use DBI;
use strict;
use vars qw(@ISA);
use Net::Server::PreFork;
no strict 'subs';
@ISA = qw(Net::Server::PreFork);
b1gMTA->run(port=>25, background=0);
exit;
sub process_request {
......
print "220 b1gMTA ready\r\n";
eval {
while( <STDIN> ){
s/\r?\n$//;
....
if($arequest eq ".") {
if(open(PIPE, "|/usr/bin/php -q /home/patrick/pipe.php")) {
print PIPE @mail;
close(PIPE);
## AN DIESER STELLE WIRD DIE VERBINDUNG MIT DEM CLIENT BEENDET
}
....
}
};
}
1;
User since
2003-08-04
2536
Artikel
ModeratorIn
äh, du willst nen MTA in perl schreiben, der nur in ein phpscript piped? warum das? aber gut.
warum gibst du nicht noch ein bisschen mehr code heraus? hier klaut dir keiner die revolutionären ideen und konzepte und bisher hat auch noch keiner mit code aus dem board ein logikpatent anzumelden versucht ,)
User since
2004-04-13
6
Artikel
BenutzerIn
:)
Wozu den anderen Code? Das sind doch die relevanten Teile? Soll ich das ganze Script posten?
Das Script pipet nach Sendmail, wenn die Mail nicht an lokal bestimmt ist, andernfalls in ein PHP Script. Hat schon seinen Sinn :)
Edit: Nach closen des Sendmail-Pipes schmiert die Connection auch ab
User since
2003-08-04
2536
Artikel
ModeratorIn
naja, relevant fände ich noch die gesamte interaktion mit dem client ...
kann sendmail das nicht selbstständig? kenne mich da nicht sonderlich aus, benutze exim, das macht sowas mit links durch config.
User since
2004-04-13
6
Artikel
BenutzerIn
Es geht darum, später unabhängig von Sendmail zu werden. Geht doch auch nicht darum, ob es sinnvoll ist, sondern Fakt ist, das es nicht geht und gerne wüsste, warum :D :) :D
Code kommt gleich, hab ich auf anderem PC
Frage mal anders: Gibt close() der Pipe irgend etwas zurück, was den Net::Server exitten lassen könnte? Irgend einen Exit Code oder irgendwas?
User since
2003-08-04
2536
Artikel
ModeratorIn
klar, so rein vom interesse her finde ich das auch schon bearbeitungswürdig, ich dachte nur, man könnte vielleicht das in den hobbybereich schieben und du deine aufgabe schneller und einfacher lösen ;)
User since
2004-04-13
6
Artikel
BenutzerIn
Danke :)
Bin neu bei Perl, bitte net meckern
edit renee:: [code]-Tags eingefügt\n\n
<!--EDIT|b1gde|1081963385-->