Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

IO::Poll Examples?

by sri (Vicar)
on May 16, 2004 at 21:44 UTC ( #353824=perlquestion: print w/replies, xml ) Need Help??
sri has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

IO::Poll is driving me nuts, i just don't get it running, and the only example i can find is a very small client in Network Programming with Perl by Lincoln D. Stein.

Hope i've missed some, or maybe someone here can give me a server example.

For those who don't know IO::Poll, it's similar to IO::Select but uses an array struct instead of a vector to store filehandles, so it can handle much more filehandles.

Replies are listed 'Best First'.
Re: IO::Poll Examples?
by kvale (Monsignor) on May 17, 2004 at 01:09 UTC
    As the man page for IO::Poll says, it is just a wrapper for poll(2), so it may pay to look into Unix/Linux docs in the call. For instance, the Unix FAQ has a poll example.


      No offense but the previous person posting back in 2004 was right. The existent documentation does not really explain how to use the module. It happened that I opened it now and.. Errrgh.. Perhaps it is a wrapper but still documentation should explain how to use it in PERL. not to send anybody to man 2 poll. I am trying to utilise it now and I find the doc useless.

      With my best wishes

        Here's a very small IRC-like server example with no frills. Have several windows telnet into its port (or ports, it can handle several), and whatever line one telnet sends gets sent to all the other telnet clients.

        #!/usr/bin/perl use IO::Socket; use IO::Poll qw( POLLIN POLLOUT ); use strict; $| = 1; my $poll = IO::Poll->new; $poll->mask($_ => POLLIN) for my @listens = map { IO::Socket::INET->new(LocalPort => $_, Listen => 9, Reuse => 1) or die "$@ opening socket on port $_" } my @ports = @ARGV ? @ARGV : (6666); my %listens = map { $_ => $_ } @listens; print "ready on @ports...\n"; while(1) { $poll->poll; for my $h ($poll->handles(POLLIN)) { if($listens{$h}) { my $new = $h->accept; $poll->mask($new => POLLIN); print "accepted from: ", $new->peerhost, ":", $new->peerport, "\ +n"; } elsif(sysread $h, my $in, 1024) { $listens{$_} or $h == $_ or print $_ $in for $poll->handles; } else { $poll->remove($h); } } }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://353824]
Approved by Happy-the-monk
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (9)
As of 2018-07-16 20:47 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (349 votes). Check out past polls.