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.