Sorry, for the Italian, but for an error i send here mail mail insted of perl-it !!!!!
I'm tryied to use send(SO,"GET / HTTP/1.0\r\n\r\n",0) and it work. Thanks Walter Bob Showalter wrote: >>-----Original Message----- >>From: walter valenti [mailto:[EMAIL PROTECTED]] >>Sent: Wednesday, January 30, 2002 11:11 AM >>To: [EMAIL PROTECTED] >>Subject: socket >> >> >>Hola, >> >>qualcuno sa dirmi perchè: >> > >(Using translator.dictionary.com, I see that the question is why the first >example "work" but the second blocks on the read, because the GET isn't >being >transmitted to the server.) > >>#!/usr/bin/perl >> >>use IO::Socket; >>#use diagnostics; >>my $host=$ARGV[0]; >>if(!$host){ >> die"...host???\n"; >>} >>$|=1; >> >>$socket=IO::Socket::INET->new(PeerAddr =>$host, PeerPort=>80, >>Proto=>"TCP") || die"$!\n"; >>print $socket "GET / HTTP/1.0\r\n\r\n"; >>while(<$socket>){ >> print"$_\n"; >>} >>close($socket); >> >> >>FUNZIONA (scrivi e leggo dal socket),mentre al contrario: >> >>#!/usr/bin/perl >> >>use Socket; >>#use diagnostics; >>my $host=$ARGV[0]; >>if(!$host){ >> die"...host???\n"; >>} >>$|=1; >> > >This line sets only current filehandle (STDOUT) to autoflush. It doesn't >affect your socket. The example with IO::Socket::INET works because >IO::Socket::new() calls autoflush(1) on the socket. > > perldoc -f select > perldoc -m IO::Socket (look at sub new) > >>socket(SO,PF_INET,SOCK_STREAM,getprotobyname('tcp')) || die"$!\n"; >> >>my $dest=sockaddr_in(80,inet_aton($host)); >>connect(SO,$dest) || die"$!\n"; >> > >You need something like: > > use IO::Handle; > SO->autoflush(1); > >>print SO "GET / HTTP/1.0\r\n\r\n"; >>while(<SO>){ >> print"$_\n"; >>} >> >>NON FUNZIONA... >>ovvero per qualche oscuro motivo la lettura dal socket >>(<SO>), blocca la >>scrittura sul socket (print SO). >>Se invece non cerco di leggere dal socket (cioè non c'è <SO>) la >>scrittura va a buon fine. >>(Il tutto controverificato con uno sniffer). >> >