123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- /* Provide a netdb.h header file for systems lacking it (read: MinGW).
- Copyright (C) 2008-2017 Free Software Foundation, Inc.
- Written by Simon Josefsson.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 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 the
- GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>. */
- /* This file is supposed to be used on platforms that lack <netdb.h>.
- It is intended to provide definitions and prototypes needed by an
- application. */
- #ifndef _@GUARD_PREFIX@_NETDB_H
- #if __GNUC__ >= 3
- @PRAGMA_SYSTEM_HEADER@
- #endif
- @PRAGMA_COLUMNS@
- #if @HAVE_NETDB_H@
- /* The include_next requires a split double-inclusion guard. */
- # @INCLUDE_NEXT@ @NEXT_NETDB_H@
- #endif
- #ifndef _@GUARD_PREFIX@_NETDB_H
- #define _@GUARD_PREFIX@_NETDB_H
- /* Get <netdb.h> definitions such as 'socklen_t' on IRIX 6.5 and OSF/1 4.0 and
- 'struct hostent' on MinGW. */
- #include <sys/socket.h>
- /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
- /* The definition of _GL_ARG_NONNULL is copied here. */
- /* The definition of _GL_WARN_ON_USE is copied here. */
- /* Declarations for a platform that lacks <netdb.h>, or where it is
- incomplete. */
- #if @GNULIB_GETADDRINFO@
- # if !@HAVE_STRUCT_ADDRINFO@
- # ifdef __cplusplus
- extern "C" {
- # endif
- # if !GNULIB_defined_struct_addrinfo
- /* Structure to contain information about address of a service provider. */
- struct addrinfo
- {
- int ai_flags; /* Input flags. */
- int ai_family; /* Protocol family for socket. */
- int ai_socktype; /* Socket type. */
- int ai_protocol; /* Protocol for socket. */
- socklen_t ai_addrlen; /* Length of socket address. */
- struct sockaddr *ai_addr; /* Socket address for socket. */
- char *ai_canonname; /* Canonical name for service location. */
- struct addrinfo *ai_next; /* Pointer to next in list. */
- };
- # define GNULIB_defined_struct_addrinfo 1
- # endif
- # ifdef __cplusplus
- }
- # endif
- # endif
- /* Possible values for 'ai_flags' field in 'addrinfo' structure. */
- # ifndef AI_PASSIVE
- # define AI_PASSIVE 0x0001 /* Socket address is intended for 'bind'. */
- # endif
- # ifndef AI_CANONNAME
- # define AI_CANONNAME 0x0002 /* Request for canonical name. */
- # endif
- # ifndef AI_NUMERICSERV
- # define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */
- # endif
- # if 0
- # define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */
- # endif
- /* These symbolic constants are required to be present by POSIX, but
- our getaddrinfo replacement doesn't use them (yet). Setting them
- to 0 on systems that doesn't have them avoids causing problems for
- system getaddrinfo implementations that would be confused by
- unknown values. */
- # ifndef AI_V4MAPPED
- # define AI_V4MAPPED 0 /* 0x0008: IPv4 mapped addresses are acceptable. */
- # endif
- # ifndef AI_ALL
- # define AI_ALL 0 /* 0x0010: Return IPv4 mapped and IPv6 addresses. */
- # endif
- # ifndef AI_ADDRCONFIG
- # define AI_ADDRCONFIG 0 /* 0x0020: Use configuration of this host to choose
- returned address type. */
- # endif
- /* Error values for 'getaddrinfo' function. */
- # ifndef EAI_BADFLAGS
- # define EAI_BADFLAGS -1 /* Invalid value for 'ai_flags' field. */
- # define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
- # define EAI_AGAIN -3 /* Temporary failure in name resolution. */
- # define EAI_FAIL -4 /* Non-recoverable failure in name res. */
- # define EAI_NODATA -5 /* No address associated with NAME. */
- # define EAI_FAMILY -6 /* 'ai_family' not supported. */
- # define EAI_SOCKTYPE -7 /* 'ai_socktype' not supported. */
- # define EAI_SERVICE -8 /* SERVICE not supported for 'ai_socktype'. */
- # define EAI_MEMORY -10 /* Memory allocation failure. */
- # endif
- /* Since EAI_NODATA is deprecated by RFC3493, some systems (at least
- FreeBSD, which does define EAI_BADFLAGS) have removed the definition
- in favor of EAI_NONAME. */
- # if !defined EAI_NODATA && defined EAI_NONAME
- # define EAI_NODATA EAI_NONAME
- # endif
- # ifndef EAI_OVERFLOW
- /* Not defined on mingw32 and Haiku. */
- # define EAI_OVERFLOW -12 /* Argument buffer overflow. */
- # endif
- # ifndef EAI_ADDRFAMILY
- /* Not defined on mingw32. */
- # define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
- # endif
- # ifndef EAI_SYSTEM
- /* Not defined on mingw32. */
- # define EAI_SYSTEM -11 /* System error returned in 'errno'. */
- # endif
- # if 0
- /* The commented out definitions below are not yet implemented in the
- GNULIB getaddrinfo() replacement, so are not yet needed.
- If they are restored, be sure to protect the definitions with #ifndef. */
- # ifndef EAI_INPROGRESS
- # define EAI_INPROGRESS -100 /* Processing request in progress. */
- # define EAI_CANCELED -101 /* Request canceled. */
- # define EAI_NOTCANCELED -102 /* Request not canceled. */
- # define EAI_ALLDONE -103 /* All requests done. */
- # define EAI_INTR -104 /* Interrupted by a signal. */
- # define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
- # endif
- # endif
- # if !@HAVE_DECL_GETADDRINFO@
- /* Translate name of a service location and/or a service name to set of
- socket addresses.
- For more details, see the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
- _GL_FUNCDECL_SYS (getaddrinfo, int,
- (const char *restrict nodename,
- const char *restrict servname,
- const struct addrinfo *restrict hints,
- struct addrinfo **restrict res)
- _GL_ARG_NONNULL ((4)));
- # endif
- _GL_CXXALIAS_SYS (getaddrinfo, int,
- (const char *restrict nodename,
- const char *restrict servname,
- const struct addrinfo *restrict hints,
- struct addrinfo **restrict res));
- _GL_CXXALIASWARN (getaddrinfo);
- # if !@HAVE_DECL_FREEADDRINFO@
- /* Free 'addrinfo' structure AI including associated storage.
- For more details, see the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
- _GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai)
- _GL_ARG_NONNULL ((1)));
- # endif
- _GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai));
- _GL_CXXALIASWARN (freeaddrinfo);
- # if @REPLACE_GAI_STRERROR@
- # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
- # undef gai_strerror
- # define gai_strerror rpl_gai_strerror
- # endif
- _GL_FUNCDECL_RPL (gai_strerror, const char *, (int ecode));
- _GL_CXXALIAS_RPL (gai_strerror, const char *, (int ecode));
- # else
- # if !@HAVE_DECL_GAI_STRERROR@
- /* Convert error return from getaddrinfo() to a string.
- For more details, see the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/gai_strerror.html>. */
- _GL_FUNCDECL_SYS (gai_strerror, const char *, (int ecode));
- # endif
- _GL_CXXALIAS_SYS (gai_strerror, const char *, (int ecode));
- # endif
- _GL_CXXALIASWARN (gai_strerror);
- # if !@HAVE_DECL_GETNAMEINFO@
- /* Convert socket address to printable node and service names.
- For more details, see the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/getnameinfo.html>. */
- _GL_FUNCDECL_SYS (getnameinfo, int,
- (const struct sockaddr *restrict sa, socklen_t salen,
- char *restrict node, socklen_t nodelen,
- char *restrict service, socklen_t servicelen,
- int flags)
- _GL_ARG_NONNULL ((1)));
- # endif
- /* Need to cast, because on glibc systems, the seventh parameter is
- unsigned int flags. */
- _GL_CXXALIAS_SYS_CAST (getnameinfo, int,
- (const struct sockaddr *restrict sa, socklen_t salen,
- char *restrict node, socklen_t nodelen,
- char *restrict service, socklen_t servicelen,
- int flags));
- _GL_CXXALIASWARN (getnameinfo);
- /* Possible flags for getnameinfo. */
- # ifndef NI_NUMERICHOST
- # define NI_NUMERICHOST 1
- # endif
- # ifndef NI_NUMERICSERV
- # define NI_NUMERICSERV 2
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getaddrinfo
- # if HAVE_RAW_DECL_GETADDRINFO
- _GL_WARN_ON_USE (getaddrinfo, "getaddrinfo is unportable - "
- "use gnulib module getaddrinfo for portability");
- # endif
- # undef freeaddrinfo
- # if HAVE_RAW_DECL_FREEADDRINFO
- _GL_WARN_ON_USE (freeaddrinfo, "freeaddrinfo is unportable - "
- "use gnulib module getaddrinfo for portability");
- # endif
- # undef gai_strerror
- # if HAVE_RAW_DECL_GAI_STRERROR
- _GL_WARN_ON_USE (gai_strerror, "gai_strerror is unportable - "
- "use gnulib module getaddrinfo for portability");
- # endif
- # undef getnameinfo
- # if HAVE_RAW_DECL_GETNAMEINFO
- _GL_WARN_ON_USE (getnameinfo, "getnameinfo is unportable - "
- "use gnulib module getaddrinfo for portability");
- # endif
- #endif
- #endif /* _@GUARD_PREFIX@_NETDB_H */
- #endif /* _@GUARD_PREFIX@_NETDB_H */
|