IO::Async man page on Alpinelinux

Man page or keyword search:  
man Server   18016 pages
apropos Keyword Search (all sections)
Output format
Alpinelinux logo
[printable version]

IO::Async(3)	      User Contributed Perl Documentation	  IO::Async(3)

NAME
       "IO::Async" - Asynchronous event-driven programming

SYNOPSIS
	use IO::Async::Stream;
	use IO::Async::Loop;

	my $loop = IO::Async::Loop->new;

	$loop->connect(
	   host	    => "some.other.host",
	   service  => 12345,
	   socktype => 'stream',

	   on_stream => sub {
	      my ( $stream ) = @_;

	      $stream->configure(
		 on_read => sub {
		    my ( $self, $buffref, $eof ) = @_;

		    while( $$buffref =~ s/^(.*\n)// ) {
		       print "Received a line $1";
		    }

		    return 0;
		 }
	      );

	      $stream->write( "An initial line here\n" );

	      $loop->add( $stream );
	   },

	   on_resolve_error => sub { die "Cannot resolve - $_[-1]\n"; },
	   on_connect_error => sub { die "Cannot connect - $_[0] failed $_[-1]\n"; },
	);

	$loop->run;

DESCRIPTION
       This collection of modules allows programs to be written that perform
       asynchronous filehandle IO operations. A typical program using them
       would consist of a single subclass of IO::Async::Loop to act as a
       container of other objects, which perform the actual IO work required
       by the program. As well as IO handles, the loop also supports timers
       and signal handlers, and includes more higher-level functionality built
       on top of these basic parts.

       Because there are a lot of classes in this collection, the following
       overview gives a brief description of each.

   Notifiers
       The base class of all the event handling subclasses is
       IO::Async::Notifier.  It does not perform any IO operations itself, but
       instead acts as a base class to build the specific IO functionality
       upon. It can also coordinate a collection of other Notifiers contained
       within it, forming a tree structure.

       The following sections describe particular types of Notifier.

   File Handle IO
       An IO::Async::Handle object is a Notifier that represents a single IO
       handle being managed. While in most cases it will represent a single
       filehandle, such as a socket (for example, an IO::Socket::INET
       connection), it is possible to have separate reading and writing
       handles (most likely for a program's "STDIN" and "STDOUT" streams, or a
       pair of pipes connected to a child process).

       The IO::Async::Stream class is a subclass of IO::Async::Handle which
       maintains internal incoming and outgoing data buffers. In this way, it
       implements bidirectional buffering of a byte stream, such as a TCP
       socket. The class automatically handles reading of incoming data into
       the incoming buffer, and writing of the outgoing buffer. Methods or
       callbacks are used to inform when new incoming data is available, or
       when the outgoing buffer is empty.

       While stream-based sockets can be handled using using
       "IO::Async::Stream", datagram or raw sockets do not provide a
       bytestream. For these, the IO::Async::Socket class is another subclass
       of IO::Async::Handle which maintains an outgoing packet queue, and
       informs of packet receipt using a callback or method.

       The IO::Async::Listener class is another subclass of IO::Async::Handle
       which facilitates the use of listen(2)-mode sockets. When a new
       connection is available on the socket it will accept(2) it and pass the
       new client socket to its callback function.

   Timers
       An IO::Async::Timer::Absolute object represents a timer that expires at
       a given absolute time in the future.

       An IO::Async::Timer::Countdown object represents a count time timer,
       which will invoke a callback after a given delay. It can be stopped and
       restarted.

       An IO::Async::Timer::Periodic object invokes a callback at regular
       intervals from its initial start time. It is reliable and will not
       drift due to the time taken to run the callback.

       The IO::Async::Loop also supports methods for managing timed events on
       a lower level. Events may be absolute, or relative in time to the time
       they are installed.

   Signals
       An IO::Async::Signal object represents a POSIX signal, which will
       invoke a callback when the given signal is received by the process.
       Multiple objects watching the same signal can be used; they will all
       invoke in no particular order.

   Processes Management
       An IO::Async::PID object invokes its event when a given child process
       exits. An IO::Async::Process object can start a new child process
       running either a given block of code, or executing a given command, set
       up pipes on its filehandles, write to or read from these pipes, and
       invoke its event when the child process exits.

   Loops
       The IO::Async::Loop object class represents an abstract collection of
       IO::Async::Notifier objects, and manages the actual filehandle IO
       watchers, timers, signal handlers, and other functionality. It performs
       all of the abstract collection management tasks, and leaves the actual
       OS interactions to a particular subclass for the purpose.

       IO::Async::Loop::Poll uses an IO::Poll object for this test.

       IO::Async::Loop::Select uses the select(2) syscall.

       Other subclasses of loop may appear on CPAN under their own dists; see
       the "SEE ALSO" section below for more detail.

       As well as these general-purpose classes, the IO::Async::Loop
       constructor also supports looking for OS-specific subclasses, in case a
       more efficient implementation exists for the specific OS it runs on.

   Child Processes
       The IO::Async::Loop object provides a number of methods to facilitate
       the running of child processes. "spawn_child" is primarily a wrapper
       around the typical fork(2)/exec(2) style of starting child processes,
       and "run_child" provide a method similar to perl's "readpipe" (which is
       used to implement backticks "``").

   File Change Watches
       The IO::Async::File object observes changes to stat(2) properties of a
       file, directory, or other filesystem object. It invokes callbacks when
       properties change. This is used by IO::Async::FileStream which presents
       the same events as a "IO::Async::Stream" but operates on a regular file
       on the filesystem, observing it for updates.

   Asynchronous Co-routines and Functions
       The "IO::Async" framework generally provides mechanisms for
       multiplexing IO tasks between different handles, so there aren't many
       occasions when it is necessary to run code in another thread or
       process. Two cases where this does become useful are when:

       ·   A large amount of computationally-intensive work needs to be
	   performed.

       ·   An OS or library-level function needs to be called, that will
	   block, and no asynchronous version is supplied.

       For these cases, an instance of IO::Async::Function can be used around
       a code block, to execute it in a worker child process or set of
       processes.  The code in the sub-process runs isolated from the main
       program, communicating only by function call arguments and return
       values. This can be used to solve problems involving state-less library
       functions.

       An IO::Async::Routine object wraps a code block running in a separate
       process to form a kind of co-routine. Communication with it happens via
       IO::Async::Channel objects. It can be used to solve any sort of problem
       involving keeping a possibly-stateful co-routine running alongside the
       rest of an asynchronous program.

   Futures
       An IO::Async::Future object represents a single outstanding action that
       is yet to complete, such as a name resolution operation or a socket
       connection.  It stands in contrast to a "IO::Async::Notifier", which is
       an object that represents an ongoing source of activity, such as a
       readable filehandle of bytes or a POSIX signal.

       Futures are a recent addition to the "IO::Async" API and details are
       still subject to change and experimentation.

       In general, methods that support Futures return a new Future object to
       represent the outstanding operation. If callback functions are supplied
       as well, these will be fired in addition to the Future object becoming
       ready. Any failures that are reported will, in general, use the same
       conventions for the Future's "fail" arguments to relate it to the
       legacy "on_error"-style callbacks.

	$on_NAME_error->( $message, @argmuents )

	$f->fail( $message, NAME, @arguments )

       where $message is a message intended for humans to read (so that this
       is the message displayed by "$f->get" if the failure is not otherwise
       caught), "NAME" is the name of the failing operation. If the failure is
       due to a failed system call, the value of $! will be the final
       argument. The message should not end with a linefeed.

   Networking
       The IO::Async::Loop provides several methods for performing network-
       based tasks. Primarily, the "connect" and "listen" methods allow the
       creation of client or server network sockets. Additionally, the
       "resolve" method allows the use of the system's name resolvers in an
       asynchronous way, to resolve names into addresses, or vice versa. These
       methods are fully IPv6-capable if the underlying operating system is.

   Protocols
       The IO::Async::Protocol class provides storage for a IO::Async::Handle
       object, to act as a transport for some protocol. It allows a level of
       independence from the actual transport being for that protocol,
       allowing it to be easily reused. The IO::Async::Protocol::Stream
       subclass provides further support for protocols based on stream
       connections, such as TCP sockets.

TODO
       This collection of modules is still very much in development. As a
       result, some of the potentially-useful parts or features currently
       missing are:

       ·   Consider further ideas on Solaris' ports, BSD's Kevents and
	   anything that might be useful on Win32.

       ·   Consider some form of persistent object wrapper in the form of an
	   "IO::Async::Object", based on "IO::Async::Routine".

       ·   "IO::Async::Protocol::Datagram"

       ·   Support for watching filesystem entries for change. Extract logic
	   from "IO::Async::File" and define a Loop watch/unwatch method pair.

       ·   Define more "Future"-returning methods. Consider also one-shot
	   Futures on things like "IO::Async::Process" exits, or
	   "IO::Async::Handle" close.

SUPPORT
       Bugs may be reported via RT at

	https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Async

       Support by IRC may also be found on irc.perl.org in the #io-async
       channel.

SEE ALSO
       As well as the two loops supplied in this distribution, many more exist
       on CPAN. At the time of writing this includes:

       ·   IO::Async::Loop::AnyEvent - use IO::Async with AnyEvent

       ·   IO::Async::Loop::Epoll - use IO::Async with epoll on Linux

       ·   IO::Async::Loop::Event - use IO::Async with Event

       ·   IO::Async::Loop::EV - use IO::Async with EV

       ·   IO::Async::Loop::Glib - use IO::Async with Glib or GTK

       ·   IO::Async::Loop::KQueue - use IO::Async with kqueue

       ·   IO::Async::Loop::Mojo - use IO::Async with Mojolicious

       ·   IO::Async::Loop::POE - use IO::Async with POE

       ·   IO::Async::Loop::Ppoll - use IO::Async with ppoll(2)

       Additionally, some other event loops or modules also support being run
       on top of "IO::Async":

       ·   AnyEvent::Impl::IOAsync - AnyEvent adapter for IO::Async

       ·   Gungho::Engine::IO::Async - IO::Async Engine

       ·   POE::Loop::IO_Async - IO::Async event loop support for POE

AUTHOR
       Paul Evans <leonerd@leonerd.org.uk>

perl v5.18.2			  2014-05-14			  IO::Async(3)
[top]

List of man pages available for Alpinelinux

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net