NAME
    Net::NBsocket -- Non-Blocking Sockets

SYNOPSIS
      use Net::NBsocket qw(
            open_UDP
            open_udpNB
            open_Listen
            open_listenNB
            connectBlk
            connect_NB
            accept_Blk
            accept_NB
            set_NB
            set_so_linger
            inet_aton
            inet_ntoa
            sockaddr_in
            sockaddr_un
            dyn_bind
      );

      $sock = open_UDP();
      $sock = open_udpNB();
      DEPRECATED $sock = bind2pp($sock,$port_path,$netaddr);
      $listener = open_Listen($port_path,$netaddr);
      $listener = open_listenNB($port_path,$netaddr);
      $rv = set_NB(*SOCK);
      $rv = set_so_linger(*HANDLE,$seconds);
      $client = connectBlk($port_path,$netaddr);
      $client = connect_NB($port_path,$netaddr);
      ($sock,$netaddr) = accept_Blk(*SERVER);
      ($sock,$netaddr) = accept_NB(*SERVER);
      $netaddr = inet_aton($dot_quad);
      $dot_quad = inet_ntoa($netaddr);
      $sin = sockaddr_in($port,$netaddr);
      ($port,$netaddr) = sockaddr_in($sin);
      $sun = sockaddr_un($path);
      ($path) = sockaddr_un($sun);
      $port = dyn_bind($sock,$iaddr);

DESCRIPTION
    Net::NBsocket provides a wrapper for Socket to supply Non-Blocking
    sockets of various flavors;

    * $netaddr = inet_aton($dot_quad);
    * $dot_quad = inet_ntoa($netaddr);
    * $sin = sockaddr_in($port,$netaddr);
    * ($port,$netaddr) = sockaddr_in($sin);
    * $sun = sockaddr_un($path);
    * ($path) = sockaddr_un($sun);
        All above exported from Socket in the EXPORT_OK array.

    * $sock = open_UDP();
        Open an unbound UDP socket as below.

    * $sock = open_udpNB();
        Open and return an unbound non-blocking UDP socket object

          input:        none
          returns:      pointer to socket object
                        or undef on failure

    * DEPRECATED $sock=bind2pp($sock,$port_path,$netaddr);
        Bind to $port_path and an optional IPv4 bind address as returned by
        inet_aton (defaults to INADDR_ANY).

          input:        port or unix domain socket path,
                        [optional] bind address
          returns:      socket on sucess, else undef;

        Author's note: This function was not well thought out and is now
        deprecated. It may be removed in future versions and is no longer in
        the EXPORT_OK array though it is still in the module and may be
        accessed with Net::NBsocket::bind2pp();

    * $listener = open_Listen($port_path,$netaddr);
        Open a blocking TCP listner as below.

    * $listener = open_listenNB($port_path,$netaddr);
        Open and return a non-blocking TCP listener bound to $port_path and
        an optional IPv4 bind address as returned by inet_aton (defaults to
        INADDR_ANY).

        Opens a unix-domain socket if port_path is a path instead of a
        number.

        The user must set the appropriate UMASK prior to calling this
        routine.

          input:        port or unix domain socket path,
                        [optional] bind address
          returns:      pointer to listening socket
                        object or undef on failure

    * $rv = set_NB(*SOCK);
        Set a socket to Non-Blocking mode

          input:        SOCK object pointer
          returns:      true on success or
                        undef on failure

    $rv = set_so_linger(*HANDLE,$seconds);
          Set SO_LINGER on top level socket

          input:        *HANDLE, seconds
          returns:      true = success, false = fail

    * $client = connectBlk($port_path,$netaddr);
        Begin a blocking TCP connection as below.

    * $client = connect_NB($port_path,$netaddr);
        Begin a non-blocking TCP connection to the host designated by
        $netaddr on $port_path, or to the unix domain socket designated by
        the path in $port_path. $netaddr is unused for unix domain sockets.

          input:        port number or unix domain socket path,
                        netaddr as returned by inet_aton
          returns:      socket object or
                        undef on failure

    * ($sock,$netaddr) = accept_Blk(*SERVER);
        Accept a connection and return a BLOCKING socket as below.

    * ($sock,$netaddr) = accept_NB(*SERVER);
        Accept a connection from a remote client, return a non-blocking
        socket and the network address of the remote host as returned by
        inet_aton or the unix domain socket path if PF_INET or PF_UNIX
        respectively.

          input:        listening socket object
          returns:      client socket object,
                        client packed netaddr or
                        unix domain socket path
                        or an emtpy array on failure

    * $port = dyn_bind($sock,$iaddr);
        Attempt to bind a socket to the IP address and randomly assigned
        port number, in the range 49152 through 65535. Fails after 100
        attempts

          input:        socket
                        iaddr as returned by sockaddr_in
          returns:      port number or undef

DEPENDENCIES
            POSIX
            Socket

EXPORT_OK
            open_UDP
            open_udpNB
            open_Listen
            open_listenNB
            connectBlk
            connect_NB
            accept_Blk
            accept_NB
            set_NB
            set_so_linger
            inet_aton
            inet_ntoa
            sockaddr_in
            sockaddr_un
            dyn_bind

AUTHOR
    Michael Robinton, michael@bizsystems.com

COPYRIGHT 2004 - 2011
    Michael Robinton

    All rights reserved.

    This program is free software; you can redistribute it and/or modify it
    under the terms of either:

      a) the GNU General Public License as published by the Free
      Software Foundation; either version 2, or (at your option) any
      later version, or

      b) the "Artistic License" which comes with this distribution.

    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the GNU
    General Public License or the Artistic License for more details.

    You should have received a copy of the Artistic License with this
    distribution, in the file named "Artistic". If not, I'll be glad to
    provide one.

    You should also have received a copy of the GNU General Public License
    along with this program in the file named "Copying". If not, write to
    the

            Free Software Foundation, Inc.
            59 Temple Place, Suite 330
            Boston, MA  02111-1307, USA

    or visit their web page on the internet at:

            http://www.gnu.org/copyleft/gpl.html.

SEE ALSO
    the POSIX manpage, the Socket manpage

