ne_iaddr_make, ne_iaddr_cmp, ne_iaddr_print, ne_iaddr_typeof, ne_iaddr_free — functions to manipulate and compare network addresses
#include <ne_socket.h>
typedef enum {
    ne_iaddr_ipv4 = 0,
    ne_iaddr_ipv6
} ne_iaddr_type;ne_inet_addr *ne_iaddr_make(ne_iaddr_type type, const unsigned char *raw);int ne_iaddr_cmp(const ne_inet_addr *ia1, const ne_inet_addr *ia2);char *ne_iaddr_print(const ne_inet_addr *ia, char *buffer, size_t bufsiz);ne_iaddr_type ne_iaddr_typeof(const ne_inet_addr *ia);void ne_iaddr_free(const ne_inet_addr *ia);ne_iaddr_make creates an
    ne_inet_addr object from a raw binary network
    address; for instance the four bytes 0x7f 0x00 0x00
    0x01 represent the IPv4 address
    127.0.0.1.  The object returned is suitable for
    passing to ne_sock_connect.  A binary IPv4
    address contains four bytes; a binary IPv6 address contains
    sixteen bytes; addresses passed must be in network byte
    order.
ne_iaddr_cmp can be used to compare two
    network addresses; returning zero only if they are identical.  The
    addresses need not be of the same address type; if the addresses
    are not of the same type, the return value is guaranteed to be
    non-zero.
ne_iaddr_print can be used to print the
    human-readable string representation of a network address into a
    buffer, for instance the string
    "127.0.0.1".
ne_iaddr_typeof returns the type of the
    given network address.
ne_iaddr_free releases the memory
    associated with a network address object.
ne_iaddr_make returns NULL if the
    address type passed is not supported (for instance on a platform
    which does not support IPv6).
ne_iaddr_print returns the
    buffer pointer, and never NULL.
The following example connects a socket to port 80 at the
    address 127.0.0.1.
unsigned char addr[] = "\0x7f\0x00\0x00\0x01";
ne_inet_addr *ia;
ia = ne_iaddr_make(ne_iaddr_ipv4, addr);
if (ia != NULL) {
    ne_socket *sock = ne_sock_connect(ia, 80);
    ne_iaddr_free(ia);
    /* ... */
} else {
    /* ... */
}