libpqtypes - getaddrinfo.h

Home Page

  1 
  2 /*
  3  * Copyright (c) 2003-2008, PostgreSQL Global Development Group
  4  * $PostgreSQL: pgsql/src/include/getaddrinfo.h
  5  */
  6 
  7 #if defined(__CYGWIN__) || (defined(HAVE_CONFIG_H) && !defined(HAVE_GETADDRINFO))
  8 
  9 #ifndef GETADDRINFO_H
 10 #define GETADDRINFO_H
 11 
 12 #include <sys/socket.h>
 13 #define _XOPEN_SOURCE_EXTENDED 1
 14 #include <netdb.h>
 15 
 16 
 17 /* Various macros that ought to be in <netdb.h>, but might not be */
 18 
 19 #ifndef EAI_FAIL
 20 #define EAI_BADFLAGS  (-1)
 21 #define EAI_NONAME    (-2)
 22 #define EAI_AGAIN   (-3)
 23 #define EAI_FAIL    (-4)
 24 #define EAI_FAMILY    (-6)
 25 #define EAI_SOCKTYPE  (-7)
 26 #define EAI_SERVICE   (-8)
 27 #define EAI_MEMORY    (-10)
 28 #define EAI_SYSTEM    (-11)
 29 #endif   /* !EAI_FAIL */
 30 
 31 #ifndef AI_PASSIVE
 32 #define AI_PASSIVE    0x0001
 33 #endif
 34 
 35 #ifndef AI_NUMERICHOST
 36 /*
 37  * some platforms don't support AI_NUMERICHOST; define as zero if using
 38  * the system version of getaddrinfo...
 39  */
 40 #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
 41 #define AI_NUMERICHOST  0
 42 #else
 43 #define AI_NUMERICHOST  0x0004
 44 #endif
 45 #endif
 46 
 47 #ifndef NI_NUMERICHOST
 48 #define NI_NUMERICHOST  1
 49 #endif
 50 #ifndef NI_NUMERICSERV
 51 #define NI_NUMERICSERV  2
 52 #endif
 53 
 54 #ifndef NI_MAXHOST
 55 #define NI_MAXHOST  1025
 56 #endif
 57 #ifndef NI_MAXSERV
 58 #define NI_MAXSERV  32
 59 #endif
 60 
 61 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
 62 
 63 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
 64 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY
 65 #define ss_family __ss_family
 66 #else
 67 #error struct sockaddr_storage does not provide an ss_family member
 68 #endif
 69 #endif
 70 
 71 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN
 72 #define ss_len __ss_len
 73 #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
 74 #endif
 75 #else             /* !HAVE_STRUCT_SOCKADDR_STORAGE */
 76 
 77 /* Define a struct sockaddr_storage if we don't have one. */
 78 
 79 #ifndef __CYGWIN__
 80 struct sockaddr_storage
 81 {
 82   union
 83   {
 84     struct sockaddr sa;   /* get the system-dependent fields */
 85                 long long int   ss_align; /* ensures struct is properly aligned */
 86     char    ss_pad[128];  /* ensures struct has desired size */
 87   }     ss_stuff;
 88 };
 89 #endif
 90 
 91 #define ss_family ss_stuff.sa.sa_family
 92 /* It should have an ss_len field if sockaddr has sa_len. */
 93 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
 94 #define ss_len    ss_stuff.sa.sa_len
 95 #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
 96 #endif
 97 #endif   /* HAVE_STRUCT_SOCKADDR_STORAGE */
 98 
 99 #ifndef HAVE_STRUCT_ADDRINFO
100 
101 struct addrinfo
102 {
103   int     ai_flags;
104   int     ai_family;
105   int     ai_socktype;
106   int     ai_protocol;
107   size_t    ai_addrlen;
108   struct sockaddr *ai_addr;
109   char     *ai_canonname;
110   struct addrinfo *ai_next;
111 };
112 
113 #endif   /* HAVE_STRUCT_ADDRINFO */
114 
115 
116 
117 /* Rename private copies per comments above */
118 #ifdef getaddrinfo
119 #undef getaddrinfo
120 #endif
121 
122 #ifdef freeaddrinfo
123 #undef freeaddrinfo
124 #endif
125 
126 #ifdef gai_strerror
127 #undef gai_strerror
128 #endif
129 
130 #ifdef getnameinfo
131 #undef getnameinfo
132 #endif
133 
134 extern int getaddrinfo(const char *node, const char *service,
135       const struct addrinfo * hints, struct addrinfo ** res);
136 extern void freeaddrinfo(struct addrinfo * res);
137 extern const char *gai_strerror(int errcode);
138 extern int getnameinfo(const struct sockaddr * sa, int salen,
139       char *node, int nodelen,
140       char *service, int servicelen, int flags);
141 
142 #endif   /* GETADDRINFO_H */
143 
144 #endif /* HAVE_GETADDRINFO */