> -----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).

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to