IO::Async::Resolver man page on Fedora

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

IO::Async::Resolver(3)User Contributed Perl DocumentatioIO::Async::Resolver(3)

NAME
       "IO::Async::Resolver" - performing name resolutions asynchronously

SYNOPSIS
       This object is used indirectly via an "IO::Async::Loop":

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

	$loop->resolve( type => 'getpwuid', data => [ $< ],
	   on_resolved =>
	      sub { print "My passwd ent: " . join( "|", @_ ) . "\n" },

	   on_error =>
	      sub { print "Cannot look up my passwd ent - $_[0]\n" },
	);

	$loop->loop_forever;

DESCRIPTION
       This module extends an "IO::Async::Loop" to use the system's name
       resolver functions asynchronously. It provides a number of named
       resolvers, each one providing an asynchronous wrapper around a single
       resolver function.

       Because the system may not provide asynchronous versions of its
       resolver functions, this class is implemented using a
       "IO::Async::DetachedCode" object that wraps the normal (blocking)
       functions. In this case, name resolutions will be performed
       asynchronously from the rest of the program, but will likely be done by
       a single background worker process, so will be processed in the order
       they were requested; a single slow lookup will hold up the queue of
       other requests behind it. To mitigate this, multiple worker processes
       can be used; see the "workers" argument to the constructor.

METHODS
   $loop->resolve( %params )
       Performs a single name resolution operation, as given by the keys in
       the hash.

       The %params hash keys the following keys:

       type => STRING
	       Name of the resolution operation to perform. See BUILT-IN
	       RESOLVERS for the list of available operations.

       data => ARRAY
	       Arguments to pass to the resolver function. Exact meaning
	       depends on the specific function chosen by the "type"; see
	       BUILT-IN RESOLVERS.

       on_resolved => CODE
	       A continuation that is invoked when the resolver function
	       returns a successful result. It will be passed the array
	       returned by the resolver function.

       on_error => CODE
	       A continuation that is invoked when the resolver function
	       fails. It will be passed the exception thrown by the function.

FUNCTIONS
   register_resolver( $name, $code )
       Registers a new named resolver function that can be called by the
       "resolve" method. All named resolvers must be registered before the
       object is constructed.

       $name   The name of the resolver function; must be a plain string. This
	       name will be used by the "type" argument to the "resolve()"
	       method, to identify it.

       $code   A CODE reference to the resolver function body. It will be
	       called in list context, being passed the list of arguments
	       given in the "data" argument to the "resolve()" method. The
	       returned list will be passed to the "on_resolved" callback. If
	       the code throws an exception at call time, it will be passed to
	       the "on_error" continuation. If it returns normally, the list
	       of values it returns will be passed to "on_resolved".

       The "IO::Async::DetachedCode" object underlying this class uses the
       "storable" argument marshalling type, which means complex data
       structures can be passed by reference. Because the resolver will run in
       a separate process, the function should make sure to return all of the
       result in the returned list; i.e. modifications to call arguments will
       not be propagated back to the caller.

BUILT-IN RESOLVERS
       The following resolver names are implemented by the same-named perl
       function, taking and returning a list of values exactly as the perl
       function does:

	getpwnam getpwuid
	getgrnam getgrgid
	getservbyname getservbyport
	gethostbyname gethostbyaddr
	getnetbyname getnetbyaddr
	getprotobyname getprotobynumber

       The following two resolver names are implemented using the same-named
       functions from the "Socket::GetAddrInfo" module.

	getaddrinfo getnameinfo

       The "getaddrinfo" resolver mangles the result of the function, so that
       the returned value is more useful to the caller. It splits up the list
       of 5-tuples into a list of ARRAY refs, where each referenced array
       contains one of the tuples of 5 values. The "getnameinfo" resolver
       returns its result unchanged.

EXAMPLES
       The following somewhat contrieved example shows how to implement a new
       resolver function. This example just uses in-memory data, but a real
       function would likely make calls to OS functions to provide an answer.
       In traditional Unix style, a pair of functions are provided that each
       look up the entity by either type of key, where both functions return
       the same type of list. This is purely a convention, and is in no way
       required or enforced by the "IO::Async::Resolver" itself.

	@numbers = qw( zero  one   two	 three four
		       five  six   seven eight nine  );

	register_resolver( 'getnumberbyindex', sub {
	   my ( $index ) = @_;
	   die "Bad index $index" unless $index >= 0 and $index < @numbers;
	   return ( $index, $numbers[$index] );
	} );

	register_resolver( 'getnumberbyname', sub {
	   my ( $name ) = @_;
	   foreach my $index ( 0 .. $#numbers ) {
	      return ( $index, $name ) if $numbers[$index] eq $name;
	   }
	   die "Bad name $name";
	} );

TODO
       ยท   Look into (system-specific) ways of accessing asynchronous
	   resolvers directly

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

perl v5.14.2			  2010-06-09		IO::Async::Resolver(3)
[top]

List of man pages available for Fedora

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