Newsgroup: it.comp.lang.perl
Titolo: problema con le socket

Salve a tutti, ho cercato un po' ma non troavto nulla che mi potesse
aiutare con il mio problema.
Ho uno script che utilizza la funzione seguente per spedire e mail
utilizzando il prtocollo SMTP(Collegamento alla porta ecc. ecc.).
La funzione va benissimo ma vorrei controllare che tutto sia andato bene. 
Se non chiudo il canale in ingresso della socket (1) ed aggiungo una parte
per rileggere ciň che mi ha risposto il server (2) mi si blocca tutto.
Il file viene spedito correttamente ma non prosegue.
Cosa puň essere l'errore ?
 Grazie tante per l'attenzione
sub sendmail($$$$)
{ my ($from, $to, $subject, $message)=@_;
  my $EOL = "\015\012";
  my $res="";
  my ($remote, $port)=split(":", $PopServer);
  my $port=25;
  my $iaddr=inet_aton($remote) || die "Nessun host per la posta.";
  my $paddr=sockaddr_in($port, $iaddr);
  $proto=getprotobyname('tcp');
  socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "client di           
             posta: <br>socket: $!";
  connect(SOCK, $paddr)    || die "client SMTP:connect: $!";
           #qui comunico con sendmail, smtp server.
           #print "Collegato al pop server..<br>";
           #Ridireziono la socket sul mio stdin/out.
           open myout, ">&SOCK" || die "open2";
           #Mi interessa una comunicazione unidirezionale.
           open myin, "<&SOCK";
           close myin; # (1)
           print myout "HELO 
skat.uniurb.it
".$EOL;
           print myout "MAIL FROM: ".$from.$EOL;
           print myout "RCPT TO: ".$to.$EOL;
           print myout "DATA".$EOL;
           print myout "Subject: ".$subject.$EOL;
           print myout join($EOL, split("\n", $message));
           print myout $EOL.".".$EOL;
           close myout;
           #(2)
};
(2) Inizio
           open mylog, ">mylog.txt";
           print mylog <myline>;
           close mylog;
           close myin;
(2) Fine
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Cosa puň essere l'errore ?
A meno che tu non abbia particolari esigenze che ti costringano a farlo,
l'errore č quello di volere riscriverti tutto dall'inizio, invece di
utilizzare uno dei diversi moduli per spedire posta, come Net::SMTP.
In alternativa, potresti almeno utilizzare il modulo Socket, cosě da non
doverti preoccupare della parte a piů basso livello.
Se invece proprio vuoi farti tutto da solo, puoi comunque andare a dare
un'occhiata come sono state risolte le cose in uno di questi moduli.
Ciao.

doverti preoccupare della parte a più basso livello.
Rileggendo meglio, vedo adesso che in effetti utilizzi Socket, anche se non
lo indichi. Resta da capire che cosa crei il problema. Un punto da
verificare potrebbero essere le open.
Resto comunque dell'idea che sarebbe meglio utilizzare Net::SMTP.
Ciao.

 Resto comunque dell'idea che sarebbe meglio utilizzare Net::SMTP.
Sfortunatamente Net::SMTP non e' presente nel sistema (E' un vecchio
server Unix che non vorrei muovere piu' di tanto...).
Grazie dei consigli.
 Paride


server Unix che non vorrei muovere piu' di tanto...).
Se hai accesso al server, installare Net::SMTP (o anche tutte le libnet) non
dovrebbe muovere granché. Controlla anche che non siano disponibili
Mail::Mailer, Mail::Send o altri moduli che forniscono interfaccie analoghe
a Net::SMTP.
Ciao.