Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re^2: New to perl: IO Select question :(

by CompleteMoron (Initiate)
on Aug 21, 2005 at 00:10 UTC ( [id://485449] : note . print w/replies, xml ) Need Help??

in reply to Re: New to perl: IO Select question :(
in thread New to perl: IO Select question :(

Thanks for the reply. Making it an array (@) still doesnt make a difference :( Yeh when I was reading a perl tutorial they mentioned that all variables must be declared with a "my" infront of them, but then reading the select() tutorial, some variables used my, some didnt so that confused me, I just copied the code. Any more suggestions? **EDIT** Yes, i am learning network programming, but il take a look at net::server thanks

Replies are listed 'Best First'.
Re^3: New to perl: IO Select question :(
by Roger (Parson) on Aug 21, 2005 at 00:16 UTC
    Try this instead, in case the select method returns a reference to an array:
    my $rhSet = IO::Select->select($readSet, undef, undef, 0); foreach $rh(@$rhSet) {

    You should also read the perldoc for IO::Select, there is a short example at the end.
    perldoc IO::Select EXAMPLE Here is a short example which shows how "IO::Select" could be used to write a server which communicates with several sockets while also listening for more connections on a listen socket use IO::Select; use IO::Socket; $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080); $sel = new IO::Select( $lsn ); while(@ready = $sel->can_read) { foreach $fh (@ready) { if($fh == $lsn) { # Create a new socket $new = $lsn->accept; $sel->add($new); } else { # Process socket # Maybe we have finished with the socket $sel->remove($fh); $fh->close; } } }

      Yup I'v seen that example, and tried it with can_read aswell, same thing happens :(
        my $sock = IO::Socket::INET->new( Proto=>"tcp", LocalHost=>"Localhost", Listen=>16, Reuse=>1, LocalPort=>$ARGV[0] ) or die("Could not create socket!\n") +; my $readSet = new IO::Select(); $readSet->add($sock); my $rhSet = IO::Select->select($readSet); while(my @ready = $rhSet->can_read(0)) { foreach $rh(@ready) { if($rh == $sock) { $newSocket=$rh->accept(); $readSet->add($newSocket); } else { $buf=<$rh>; if($buf) { printf "$buf"; } else { $readSet->remove($rh); close($rh); } } } }