NAME UV - Perl interface to libuv SYNOPSIS #!/usr/bin/env perl use strict; use warnings; use UV; use UV::Loop; # hi-resolution time my $hi_res_time = UV::hrtime(); # A new loop my $loop = UV::Loop->new(); # default loop my $loop = UV::Loop->default_loop(); # convenience singleton constructor my $loop = UV::Loop->default(); # convenience singleton constructor # run a loop with one of three options: # UV_RUN_DEFAULT, UV_RUN_ONCE, UV_RUN_NOWAIT $loop->run(); # runs with UV_RUN_DEFAULT $loop->run(UV::Loop::UV_RUN_DEFAULT); # explicitly state UV_RUN_DEFAULT $loop->run(UV::Loop::UV_RUN_ONCE); $loop->run(UV::Loop::UV_RUN_NOWAIT); DESCRIPTION This module provides an interface to libuv <http://libuv.org>. We will try to document things here as best as we can, but we also suggest you look at the libuv docs <http://docs.libuv.org> directly for more details on how things work. Event loops that work properly on all platforms. YAY! CONSTANTS VERSION CONSTANTS UV_VERSION_MAJOR UV_VERSION_MINOR UV_VERSION_PATCH UV_VERSION_IS_RELEASE UV_VERSION_SUFFIX UV_VERSION_HEX ERROR CONSTANTS UV_E2BIG Argument list too long UV_EACCES Permission denied UV_EADDRINUSE Address already in use UV_EADDRNOTAVAIL Address not available UV_EAFNOSUPPORT Address family not supported UV_EAGAIN Resource temporarily unavailable UV_EAI_ADDRFAMILY Address family not supported UV_EAI_AGAIN Temporary failure UV_EAI_BADFLAGS Bad ai_flags value UV_EAI_BADHINTS Invalid value for hints UV_EAI_CANCELED Request canceled UV_EAI_FAIL Permanent failure UV_EAI_FAMILY ai_family not supported UV_EAI_MEMORY Out of memory UV_EAI_NODATA No address UV_EAI_NONAME Unknown node or service UV_EAI_OVERFLOW Argument buffer overflow UV_EAI_PROTOCOL Resolved protocol is unknown UV_EAI_SERVICE Service not available for socket type UV_EAI_SOCKTYPE Socket type not supported UV_EALREADY Connection already in progress UV_EBADF Bad file descriptor UV_EBUSY Resource busy or locked UV_ECANCELED Operation canceled UV_ECHARSET Invalid Unicode character UV_ECONNABORTED Software caused connection abort UV_ECONNREFUSED Connection refused UV_ECONNRESET Connection reset by peer UV_EDESTADDRREQ Destination address required UV_EEXIST File already exists UV_EFAULT Bad address in system call argument UV_EFBIG File too large UV_EHOSTUNREACH Host is unreachable UV_EINTR Interrupted system call UV_EINVAL Invalid argument UV_EIO i/o error UV_EISCONN Socket is already connected UV_EISDIR Illegal operation on a directory UV_ELOOP Too many symbolic links encountered UV_EMFILE Too many open files UV_EMLINK Too many links UV_EMSGSIZE Message too long UV_ENAMETOOLONG Name too long UV_ENETDOWN Network is down UV_ENETUNREACH Network is unreachable UV_ENFILE File table overflow UV_ENOBUFS No buffer space available UV_ENODEV No such device UV_ENOENT No such file or directory UV_ENOMEM Not enough memory UV_ENONET Machine is not on the network UV_ENOPROTOOPT Protocol not available UV_ENOSPC No space left on device UV_ENOSYS Function not implemented UV_ENOTCONN Socket is not connected UV_ENOTDIR Not a directory UV_ENOTEMPTY Directory not empty UV_ENOTSOCK Socket operation on non-socket UV_ENOTSUP Operation not supported on socket UV_ENXIO No such device or address UV_EOF End of file UV_EPERM Operation not permitted UV_EPIPE Broken pipe UV_EPROTO Protocol error UV_EPROTONOSUPPORT Protocol not supported UV_EPROTOTYPE Protocol wrong type for socket UV_ERANGE Result too large UV_EROFS Read-only file system UV_ESHUTDOWN Cannot send after transport endpoint shutdown UV_ESPIPE Invalid seek UV_ESRCH No such process UV_ETIMEDOUT Connection timed out UV_ETXTBSY Text file is busy UV_EXDEV Cross-device link not permitted UV_UNKNOWN Unknown error FUNCTIONS The following functions are available: check my $handle = UV::check(); # uses the default loop my $handle = UV::check(loop => $some_other_loop); # non-default loop Returns a new UV::Check Handle object. default_loop my $loop = UV::default_loop(); # You can also get it with the UV::Loop methods below: my $loop = UV::Loop->default_loop(); my $loop = UV::Loop->default(); # Passing a true value as the first arg to the UV::Loop constructor # will also return the default loop my $loop = UV::Loop->new(1); Returns the default loop (which is a singleton object). This module already creates the default loop and you get access to it with this method. err_name my $error_name = UV::err_name(UV::UV_EAI_BADFLAGS); say $error_name; # EAI_BADFLAGS The err_name <http://docs.libuv.org/en/v1.x/errors.html#c.uv_err_name> function returns the error name for the given error code. Leaks a few bytes of memory when you call it with an unknown error code. In libuv errors are negative numbered constants. As a rule of thumb, whenever there is a status parameter, or an API functions returns an integer, a negative number will imply an error. When a function which takes a callback returns an error, the callback will never be called. hrtime my $uint64_t = UV::hrtime(); Get the current Hi-Res time ("uint64_t"). idle my $handle = UV::idle(); # uses the default loop my $handle = UV::idle(loop => $some_other_loop); # non-default loop Returns a new UV::Idle Handle object. loop my $loop = UV::loop(); # You can also get it with the UV::Loop methods below: my $loop = UV::Loop->default_loop(); my $loop = UV::Loop->default(); Returns the default loop (which is a singleton object). This module already creates the default loop and you get access to it with this method. poll my $handle = UV::poll(); # uses the default loop my $handle = UV::poll(loop => $some_other_loop); # non-default loop Returns a new UV::Poll Handle object. prepare my $handle = UV::prepare(); # uses the default loop my $handle = UV::prepare(loop => $some_other_loop); # non-default loop Returns a new UV::Prepare Handle object. strerror my $error = UV::strerror(UV::UV_EAI_BADFLAGS); say $error; # bad ai_flags value The strerror <http://docs.libuv.org/en/v1.x/errors.html#c.uv_strerror> function returns the error message for the given error code. Leaks a few bytes of memory when you call it with an unknown error code. In libuv errors are negative numbered constants. As a rule of thumb, whenever there is a status parameter, or an API functions returns an integer, a negative number will imply an error. When a function which takes a callback returns an error, the callback will never be called. timer my $timer = UV::timer(); # uses the default loop my $timer = UV::timer(loop => $some_other_loop); # non-default loop Returns a new UV::Timer object. version my $int = UV::version(); The version <http://docs.libuv.org/en/v1.x/version.html#c.uv_version> function returns "UV::UV_VERSION_HEX", the libuv version packed into a single integer. 8 bits are used for each component, with the patch number stored in the 8 least significant bits. E.g. for libuv 1.2.3 this would be 0x010203. version_string say UV::version_string(); # 1.13.1 The version_string <http://docs.libuv.org/en/v1.x/version.html#c.uv_version_string> function returns the libuv version number as a string. For non-release versions the version suffix is included. AUTHOR Chase Whitener <capoeirab@cpan.org> AUTHOR EMERITUS Daisuke Murase <typester@cpan.org> COPYRIGHT AND LICENSE Copyright 2012, Daisuke Murase. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.