NAME¶
Linux::Epoll - O(1) multiplexing for Linux
VERSION¶
version 0.011
SYNOPSIS¶
use Linux::Epoll;
my $epoll = Linux::Epoll->new();
$epoll->add($fh, 'in', sub {
my $events = shift;
do_something($fh) if $events->{in};
});
$epoll->wait while 1;
DESCRIPTION¶
Epoll is a multiplexing mechanism that scales up O(1) with number of watched
files. Linux::Epoll is a callback style epoll module, unlike other epoll
modules available on CPAN.
Types of events¶
- •
- in
The associated filehandle is availible for reading.
- •
- out
The associated filehandle is availible for writing.
- •
- err
An error condition has happened on the associated filehandle.
"wait" will always wait on this event, it is not necessary to
set this with "add" or "modify".
- •
- prio
There is urgent data available for reading.
- •
- et
Set edge triggered behavior for the associated filehandle. The default
behavior is level triggered. See you epoll(7) documentation for
more information on what this means.
- •
- hup
A hang-up has happened on the associated filehandle. "wait" will
always wait on this event, it is not necessary to set this with
"add" or "modify".
- •
- rdhup
Stream socket peer closed the connection, or shut down the writing half of
connection. This flag is especially useful for writing simple code to
detect peer shutdown when using Edge Triggered monitoring.
- •
- oneshot
Sets the one-shot behavior for the associated file descriptor. This means
that after an event is pulled out with "wait" the associated
file descriptor is internally disabled and no other events will be
reported by the epoll interface. The user must call "modify" to
rearm the file descriptor with a new event mask.
METHODS¶
new()¶
Create a new epoll instance.
add($fh, $events, $callback)¶
Register the filehandle with the epoll instance and associate events $events and
callback $callback with it. $events may be either a string (e.g. 'in') or an
arrayref (e.g. "[qw/in out hup/]"). If a filehandle already exists
in the set and "add" is called in non-void context, it returns undef
and sets $! to "EEXIST"; if the file can't be waited upon it sets $!
to "EPERM" instead. On all other error conditions an exception is
thrown. The callback gets a single argument, a hashref whose keys are the
triggered events.
modify($fh, $events, $callback)¶
Change the events and callback associated on this epoll instance with filehandle
$fh. The arguments work the same as with "add". If a filehandle
doesn't exist in the set and "modify" is called in non-void context,
it returns undef and sets $! to "ENOENT". On all other error
conditions an exception is thrown.
delete($fh)¶
Remove a filehandle from the epoll instance. If a filehandle doesn't exist in
the set and "delete" is called in non-void context, it returns undef
and sets $! to "ENOENT". On all other error conditions an exception
is thrown.
wait($number = 1, $timeout = undef, $sigmask = undef)¶
Wait for up to $number events, where $number must be greater than zero. $timeout
is the maximal time "wait" will wait for events in fractional
seconds. If it is undefined it may wait indefinitely. $sigmask is the signal
mask during the call. If it is not defined the signal mask will be untouched.
If interrupted by a signal it returns undef/an empty list and sets $! to
"EINTR". On all other error conditions an exception is thrown.
REQUIREMENTS¶
This module requires at least Perl 5.10 and Linux 2.6.19 to function correctly.
SEE ALSO¶
- •
- IO::Epoll
- •
- Sys::Syscall
- •
- IO::Poll
AUTHOR¶
Leon Timmermans <leont@cpan.org>
COPYRIGHT AND LICENSE¶
This software is copyright (c) 2010 by Leon Timmermans.
This is free software; you can redistribute it and/or modify it under the same
terms as the Perl 5 programming language system itself.