Annotation of embedaddon/sudo/compat/getaddrinfo.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Replacement implementation of getaddrinfo.
        !             3:  *
        !             4:  * This is an implementation of the getaddrinfo family of functions for
        !             5:  * systems that lack it, so that code can use getaddrinfo always.  It provides
        !             6:  * IPv4 support only; for IPv6 support, a native getaddrinfo implemenation is
        !             7:  * required.
        !             8:  *
        !             9:  * The canonical version of this file is maintained in the rra-c-util package,
        !            10:  * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
        !            11:  *
        !            12:  * Written by Russ Allbery <rra@stanford.edu>
        !            13:  *
        !            14:  * The authors hereby relinquish any claim to any copyright that they may have
        !            15:  * in this work, whether granted under contract or by operation of law or
        !            16:  * international treaty, and hereby commit to the public, at large, that they
        !            17:  * shall not, at any time in the future, seek to enforce any copyright in this
        !            18:  * work against any person or entity, or prevent any person or entity from
        !            19:  * copying, publishing, distributing or creating derivative works of this
        !            20:  * work.
        !            21:  */
        !            22: 
        !            23: #ifndef _COMPAT_GETADDRINFO_H
        !            24: #define _COMPAT_GETADDRINFO_H
        !            25: 
        !            26: #include <config.h>
        !            27: 
        !            28: /* Skip this entire file if a system getaddrinfo was detected. */
        !            29: #ifndef HAVE_GETADDRINFO
        !            30: 
        !            31: /* OpenBSD likes to have sys/types.h included before sys/socket.h. */
        !            32: #include <sys/types.h>
        !            33: #include <sys/socket.h>
        !            34: 
        !            35: /* The struct returned by getaddrinfo, from RFC 3493. */
        !            36: struct addrinfo {
        !            37:     int ai_flags;               /* AI_PASSIVE, AI_CANONNAME, .. */
        !            38:     int ai_family;              /* AF_xxx */
        !            39:     int ai_socktype;            /* SOCK_xxx */
        !            40:     int ai_protocol;            /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
        !            41:     socklen_t ai_addrlen;       /* Length of ai_addr */
        !            42:     char *ai_canonname;         /* Canonical name for nodename */
        !            43:     struct sockaddr *ai_addr;   /* Binary address */
        !            44:     struct addrinfo *ai_next;   /* Next structure in linked list */
        !            45: };
        !            46: 
        !            47: /* Constants for ai_flags from RFC 3493, combined with binary or. */
        !            48: #define AI_PASSIVE      0x0001
        !            49: #define AI_CANONNAME    0x0002
        !            50: #define AI_NUMERICHOST  0x0004
        !            51: #define AI_NUMERICSERV  0x0008
        !            52: #define AI_V4MAPPED     0x0010
        !            53: #define AI_ALL          0x0020
        !            54: #define AI_ADDRCONFIG   0x0040
        !            55: 
        !            56: /* Error return codes from RFC 3493. */
        !            57: #define EAI_AGAIN       1       /* Temporary name resolution failure */
        !            58: #define EAI_BADFLAGS    2       /* Invalid value in ai_flags parameter */
        !            59: #define EAI_FAIL        3       /* Permanent name resolution failure */
        !            60: #define EAI_FAMILY      4       /* Address family not recognized */
        !            61: #define EAI_MEMORY      5       /* Memory allocation failure */
        !            62: #define EAI_NONAME      6       /* nodename or servname unknown */
        !            63: #define EAI_SERVICE     7       /* Service not recognized for socket type */
        !            64: #define EAI_SOCKTYPE    8       /* Socket type not recognized */
        !            65: #define EAI_SYSTEM      9       /* System error occurred, see errno */
        !            66: #define EAI_OVERFLOW    10      /* An argument buffer overflowed */
        !            67: 
        !            68: /* Function prototypes. */
        !            69: int getaddrinfo(const char *nodename, const char *servname,
        !            70:                 const struct addrinfo *hints, struct addrinfo **res);
        !            71: void freeaddrinfo(struct addrinfo *ai);
        !            72: const char *gai_strerror(int ecode);
        !            73: 
        !            74: #endif /* !HAVE_GETADDRINFO */
        !            75: #endif /* _COMPAT_GETADDRINFO_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>