inet_ntoa - load the C socket.h defines and structure manipulators

- NAME
- SYNOPSIS
- DESCRIPTION

# NAME

Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C socket.h defines and structure manipulators

# SYNOPSIS

        use Socket;

        $proto = getprotobyname('udp');
        socket(Socket_Handle, PF_INET, SOCK_DGRAM, $proto);
        $iaddr = gethostbyname('hishost.com');
        $port = getservbyname('time', 'udp');
        $sin = sockaddr_in($port, $iaddr);
        send(Socket_Handle, 0, 0, $sin);

        $proto = getprotobyname('tcp');
        socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
        $port = getservbyname('smtp');
        $sin = sockaddr_in($port,inet_aton("127.1"));
        $sin = sockaddr_in(7,inet_aton("localhost"));
        $sin = sockaddr_in(7,INADDR_LOOPBACK);
        connect(Socket_Handle,$sin);

        ($port, $iaddr) = sockaddr_in(getpeername(Socket_Handle));
        $peer_host = gethostbyaddr($iaddr, AF_INET);
        $peer_addr = inet_ntoa($iaddr);

        $proto = getprotobyname('tcp');
        socket(Socket_Handle, PF_UNIX, SOCK_STREAM, $proto);
        unlink('/tmp/usock');
        $sun = sockaddr_un('/tmp/usock');
        connect(Socket_Handle,$sun);

# DESCRIPTION

This module is just a translation of the C socket.h file. Unlike the old mechanism of requiring a translated socket.ph file, this uses the h2xs program (see the Perl source distribution) and your native C compiler. This means that it has a far more likely chance of getting the numbers right. This includes all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc.

In addition, some structure manipulation functions are available:

inet_aton HOSTNAME
  Takes a string giving the name of a host, and translates that to the 4-byte string (structure). Takes arguments of both the 'rtfm.mit.edu' type and '18.181.0.24'. If the host name cannot be resolved, returns undef. For multi-homed hosts (hosts with more than one address), the first address found is returned.

inet_ntoa IP_ADDRESS
  Takes a four byte ip address (as returned by `inet_aton())` and translates it into a string of the form 'd.d.d.d' where the 'd's are numbers less than 256 (the normal readable four dotted number notation for internet addresses).

INADDR_ANY
  Note: does not return a number, but a packed string.

  Returns the 4-byte wildcard ip address which specifies any of the hosts ip addresses. (A particular machine can have more than one ip address, each address corresponding to a particular network interface. This wildcard address allows you to bind to all of them simultaneously.) Normally equivalent to `inet_aton('0.0.0.0').`

INADDR_BROADCAST
  Note: does not return a number, but a packed string.

  Returns the 4-byte 'this-lan' ip broadcast address. This can be useful for some protocols to solicit information from all servers on the same LAN cable. Normally equivalent to `inet_aton('255.255.255.255').`

INADDR_LOOPBACK
  Note - does not return a number.

  Returns the 4-byte loopback address. Normally equivalent to `inet_aton('localhost').`

INADDR_NONE
  Note - does not return a number.

  Returns the 4-byte 'invalid' ip address. Normally equivalent to `inet_aton('255.255.255.255').`

sockaddr_in PORT, ADDRESS
sockaddr_in SOCKADDR_IN
  In an array context, unpacks its SOCKADDR_IN argument and returns an array consisting of (PORT, ADDRESS). In a scalar context, packs its (PORT, ADDRESS) arguments as a SOCKADDR_IN and returns it. If this is confusing, use `pack_sockaddr_in()` and `unpack_sockaddr_in()` explicitly.

pack_sockaddr_in PORT, IP_ADDRESS
  Takes two arguments, a port number and a 4 byte IP_ADDRESS (as returned by `inet_aton()).` Returns the sockaddr_in structure with those arguments packed in with AF_INET filled in. For internet domain sockets, this structure is normally what you need for the arguments in `bind(),` `connect(),` and `send(),` and is also returned by `getpeername(),` `getsockname()` and `recv().`

unpack_sockaddr_in SOCKADDR_IN
  Takes a sockaddr_in structure (as returned by `pack_sockaddr_in())` and returns an array of two elements: the port and the 4-byte ip-address. Will croak if the structure does not have AF_INET in the right place.

sockaddr_un PATHNAME
sockaddr_un SOCKADDR_UN
  In an array context, unpacks its SOCKADDR_UN argument and returns an array consisting of (PATHNAME). In a scalar context, packs its PATHNAME arguments as a SOCKADDR_UN and returns it. If this is confusing, use `pack_sockaddr_un()` and `unpack_sockaddr_un()` explicitly. These are only supported if your system has <sys/un.h>.

pack_sockaddr_un PATH
  Takes one argument, a pathname. Returns the sockaddr_un structure with that path packed in with AF_UNIX filled in. For unix domain sockets, this structure is normally what you need for the arguments in `bind(),` `connect(),` and `send(),` and is also returned by `getpeername(),` `getsockname()` and `recv().`

unpack_sockaddr_un SOCKADDR_UN
  Takes a sockaddr_un structure (as returned by `pack_sockaddr_un())` and returns the pathname. Will croak if the structure does not have AF_UNIX in the right place.