17777dab0Sopenharmony_ci#ifndef	_NETDB_H
27777dab0Sopenharmony_ci#define	_NETDB_H
37777dab0Sopenharmony_ci
47777dab0Sopenharmony_ci#ifdef __cplusplus
57777dab0Sopenharmony_ciextern "C" {
67777dab0Sopenharmony_ci#endif
77777dab0Sopenharmony_ci
87777dab0Sopenharmony_ci#include <features.h>
97777dab0Sopenharmony_ci#include <netinet/in.h>
107777dab0Sopenharmony_ci
117777dab0Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
127777dab0Sopenharmony_ci#define __NEED_size_t
137777dab0Sopenharmony_ci#include <bits/alltypes.h>
147777dab0Sopenharmony_ci#endif
157777dab0Sopenharmony_ci
167777dab0Sopenharmony_cistruct addrinfo {
177777dab0Sopenharmony_ci	int ai_flags;
187777dab0Sopenharmony_ci	int ai_family;
197777dab0Sopenharmony_ci	int ai_socktype;
207777dab0Sopenharmony_ci	int ai_protocol;
217777dab0Sopenharmony_ci	socklen_t ai_addrlen;
227777dab0Sopenharmony_ci	struct sockaddr *ai_addr;
237777dab0Sopenharmony_ci	char *ai_canonname;
247777dab0Sopenharmony_ci	struct addrinfo *ai_next;
257777dab0Sopenharmony_ci};
267777dab0Sopenharmony_ci
277777dab0Sopenharmony_ci#define AI_PASSIVE      0x01
287777dab0Sopenharmony_ci#define AI_CANONNAME    0x02
297777dab0Sopenharmony_ci#define AI_NUMERICHOST  0x04
307777dab0Sopenharmony_ci#define AI_V4MAPPED     0x08
317777dab0Sopenharmony_ci#define AI_ALL          0x10
327777dab0Sopenharmony_ci#define AI_ADDRCONFIG   0x20
337777dab0Sopenharmony_ci#define AI_NUMERICSERV  0x400
347777dab0Sopenharmony_ci
357777dab0Sopenharmony_ci
367777dab0Sopenharmony_ci#define NI_NUMERICHOST  0x01
377777dab0Sopenharmony_ci#define NI_NUMERICSERV  0x02
387777dab0Sopenharmony_ci#define NI_NOFQDN       0x04
397777dab0Sopenharmony_ci#define NI_NAMEREQD     0x08
407777dab0Sopenharmony_ci#define NI_DGRAM        0x10
417777dab0Sopenharmony_ci#define NI_NUMERICSCOPE 0x100
427777dab0Sopenharmony_ci
437777dab0Sopenharmony_ci#define EAI_BADFLAGS   -1
447777dab0Sopenharmony_ci#define EAI_NONAME     -2
457777dab0Sopenharmony_ci#define EAI_AGAIN      -3
467777dab0Sopenharmony_ci#define EAI_FAIL       -4
477777dab0Sopenharmony_ci#define EAI_FAMILY     -6
487777dab0Sopenharmony_ci#define EAI_SOCKTYPE   -7
497777dab0Sopenharmony_ci#define EAI_SERVICE    -8
507777dab0Sopenharmony_ci#define EAI_MEMORY     -10
517777dab0Sopenharmony_ci#define EAI_SYSTEM     -11
527777dab0Sopenharmony_ci#define EAI_OVERFLOW   -12
537777dab0Sopenharmony_ci
547777dab0Sopenharmony_ciint getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict);
557777dab0Sopenharmony_civoid freeaddrinfo (struct addrinfo *);
567777dab0Sopenharmony_ciint getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int);
577777dab0Sopenharmony_ciconst char *gai_strerror(int);
587777dab0Sopenharmony_ci
597777dab0Sopenharmony_ci
607777dab0Sopenharmony_ci/* Legacy functions follow (marked OBsolete in SUS) */
617777dab0Sopenharmony_ci
627777dab0Sopenharmony_cistruct netent {
637777dab0Sopenharmony_ci	char *n_name;
647777dab0Sopenharmony_ci	char **n_aliases;
657777dab0Sopenharmony_ci	int n_addrtype;
667777dab0Sopenharmony_ci	uint32_t n_net;
677777dab0Sopenharmony_ci};
687777dab0Sopenharmony_ci
697777dab0Sopenharmony_cistruct hostent {
707777dab0Sopenharmony_ci	char *h_name;
717777dab0Sopenharmony_ci	char **h_aliases;
727777dab0Sopenharmony_ci	int h_addrtype;
737777dab0Sopenharmony_ci	int h_length;
747777dab0Sopenharmony_ci	char **h_addr_list;
757777dab0Sopenharmony_ci};
767777dab0Sopenharmony_ci#define h_addr h_addr_list[0]
777777dab0Sopenharmony_ci
787777dab0Sopenharmony_cistruct servent {
797777dab0Sopenharmony_ci	char *s_name;
807777dab0Sopenharmony_ci	char **s_aliases;
817777dab0Sopenharmony_ci	int s_port;
827777dab0Sopenharmony_ci	char *s_proto;
837777dab0Sopenharmony_ci};
847777dab0Sopenharmony_ci
857777dab0Sopenharmony_cistruct protoent {
867777dab0Sopenharmony_ci	char *p_name;
877777dab0Sopenharmony_ci	char **p_aliases;
887777dab0Sopenharmony_ci	int p_proto;
897777dab0Sopenharmony_ci};
907777dab0Sopenharmony_ci
917777dab0Sopenharmony_civoid sethostent (int);
927777dab0Sopenharmony_civoid endhostent (void);
937777dab0Sopenharmony_cistruct hostent *gethostent (void);
947777dab0Sopenharmony_ci
957777dab0Sopenharmony_civoid setnetent (int);
967777dab0Sopenharmony_civoid endnetent (void);
977777dab0Sopenharmony_cistruct netent *getnetent (void);
987777dab0Sopenharmony_cistruct netent *getnetbyaddr (uint32_t, int);
997777dab0Sopenharmony_cistruct netent *getnetbyname (const char *);
1007777dab0Sopenharmony_ci
1017777dab0Sopenharmony_civoid setservent (int);
1027777dab0Sopenharmony_civoid endservent (void);
1037777dab0Sopenharmony_cistruct servent *getservent (void);
1047777dab0Sopenharmony_cistruct servent *getservbyname (const char *, const char *);
1057777dab0Sopenharmony_cistruct servent *getservbyport (int, const char *);
1067777dab0Sopenharmony_ci
1077777dab0Sopenharmony_civoid setprotoent (int);
1087777dab0Sopenharmony_civoid endprotoent (void);
1097777dab0Sopenharmony_cistruct protoent *getprotoent (void);
1107777dab0Sopenharmony_cistruct protoent *getprotobyname (const char *);
1117777dab0Sopenharmony_cistruct protoent *getprotobynumber (int);
1127777dab0Sopenharmony_ci
1137777dab0Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \
1147777dab0Sopenharmony_ci || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \
1157777dab0Sopenharmony_ci || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700)
1167777dab0Sopenharmony_cistruct hostent *gethostbyname (const char *);
1177777dab0Sopenharmony_cistruct hostent *gethostbyaddr (const void *, socklen_t, int);
1187777dab0Sopenharmony_ci#ifdef __GNUC__
1197777dab0Sopenharmony_ci__attribute__((const))
1207777dab0Sopenharmony_ci#endif
1217777dab0Sopenharmony_ciint *__h_errno_location(void);
1227777dab0Sopenharmony_ci#define h_errno (*__h_errno_location())
1237777dab0Sopenharmony_ci#define HOST_NOT_FOUND 1
1247777dab0Sopenharmony_ci#define TRY_AGAIN      2
1257777dab0Sopenharmony_ci#define NO_RECOVERY    3
1267777dab0Sopenharmony_ci#define NO_DATA        4
1277777dab0Sopenharmony_ci#define NO_ADDRESS     NO_DATA
1287777dab0Sopenharmony_ci#endif
1297777dab0Sopenharmony_ci
1307777dab0Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
1317777dab0Sopenharmony_civoid herror(const char *);
1327777dab0Sopenharmony_ciconst char *hstrerror(int);
1337777dab0Sopenharmony_ciint gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *);
1347777dab0Sopenharmony_ciint gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *);
1357777dab0Sopenharmony_cistruct hostent *gethostbyname2(const char *, int);
1367777dab0Sopenharmony_ciint gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *);
1377777dab0Sopenharmony_ci#define EAI_NODATA     -5
1387777dab0Sopenharmony_ci#define EAI_ADDRFAMILY -9
1397777dab0Sopenharmony_ci#define EAI_INPROGRESS -100
1407777dab0Sopenharmony_ci#define EAI_CANCELED   -101
1417777dab0Sopenharmony_ci#define EAI_NOTCANCELED -102
1427777dab0Sopenharmony_ci#define EAI_ALLDONE    -103
1437777dab0Sopenharmony_ci#define EAI_INTR       -104
1447777dab0Sopenharmony_ci#define EAI_IDN_ENCODE -105
1457777dab0Sopenharmony_ci#define NI_MAXHOST 255
1467777dab0Sopenharmony_ci#define NI_MAXSERV 32
1477777dab0Sopenharmony_ci#endif
1487777dab0Sopenharmony_ci
1497777dab0Sopenharmony_ci
1507777dab0Sopenharmony_ci#ifdef __cplusplus
1517777dab0Sopenharmony_ci}
1527777dab0Sopenharmony_ci#endif
1537777dab0Sopenharmony_ci
1547777dab0Sopenharmony_ci#endif
155