1/* 2 * Copyright 2023, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _NETDB_H_ 6#define _NETDB_H_ 7 8#include <stdint.h> 9#include <netinet/in.h> 10 11 12#ifdef __cplusplus 13extern "C" { 14#endif 15 16 17struct hostent { 18 char* h_name; 19 char** h_aliases; 20 int h_addrtype; 21 int h_length; 22 char** h_addr_list; 23#define h_addr h_addr_list[0] 24}; 25 26struct netent { 27 char* n_name; 28 char** n_aliases; 29 int n_addrtype; 30 in_addr_t n_net; 31}; 32 33struct servent { 34 char* s_name; 35 char** s_aliases; 36 int s_port; 37 char* s_proto; 38}; 39 40struct protoent { 41 char* p_name; 42 char** p_aliases; 43 int p_proto; 44}; 45 46struct addrinfo { 47 int ai_flags; 48 int ai_family; 49 int ai_socktype; 50 int ai_protocol; 51 socklen_t ai_addrlen; 52 char* ai_canonname; 53 struct sockaddr* ai_addr; 54 struct addrinfo* ai_next; 55}; 56 57 58#if defined(_DEFAULT_SOURCE) 59extern int * __h_errno(void); 60#define h_errno (*__h_errno()) 61 62void herror(const char *); 63const char *hstrerror(int); 64 65#define NETDB_INTERNAL -1 66#define NETDB_SUCCESS 0 67#define HOST_NOT_FOUND 1 68#define TRY_AGAIN 2 69#define NO_RECOVERY 3 70#define NO_DATA 4 71#define NO_ADDRESS NO_DATA 72#endif 73 74 75/* getaddrinfo, getnameinfo */ 76#define AI_PASSIVE 0x00000001 77#define AI_CANONNAME 0x00000002 78#define AI_NUMERICHOST 0x00000004 79#define AI_NUMERICSERV 0x00000008 80 81#define AI_ALL 0x00000100 82#define AI_V4MAPPED_CFG 0x00000200 83#define AI_ADDRCONFIG 0x00000400 84#define AI_V4MAPPED 0x00000800 85 86#define AI_MASK \ 87 (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_ADDRCONFIG) 88 89 90/* getnameinfo */ 91#if defined(_DEFAULT_SOURCE) 92#define NI_MAXHOST 1025 93#define NI_MAXSERV 32 94 95#define SCOPE_DELIMITER '%' 96#endif 97 98#define NI_NOFQDN 0x00000001 99#define NI_NUMERICHOST 0x00000002 100#define NI_NAMEREQD 0x00000004 101#define NI_NUMERICSERV 0x00000008 102#define NI_DGRAM 0x00000010 103#define NI_NUMERICSCOPE 0x00000040 104 105 106/* getaddrinfo */ 107#define EAI_ADDRFAMILY 1 108#define EAI_AGAIN 2 109#define EAI_BADFLAGS 3 110#define EAI_FAIL 4 111#define EAI_FAMILY 5 112#define EAI_MEMORY 6 113#define EAI_NODATA 7 114#define EAI_NONAME 8 115#define EAI_SERVICE 9 116#define EAI_SOCKTYPE 10 117#define EAI_SYSTEM 11 118#define EAI_BADHINTS 12 119#define EAI_PROTOCOL 13 120#define EAI_OVERFLOW 14 121#define EAI_MAX 15 122 123 124void sethostent(int); 125void endhostent(void); 126struct hostent* gethostent(void); 127 128void setnetent(int); 129void endnetent(void); 130struct netent* getnetbyaddr(uint32_t, int); 131struct netent* getnetbyname(const char *); 132struct netent* getnetent(void); 133 134void setprotoent(int); 135void endprotoent(void); 136struct protoent* getprotoent(void); 137struct protoent* getprotobyname(const char *); 138struct protoent* getprotobynumber(int); 139 140void setservent(int); 141void endservent(void); 142struct servent* getservent(void); 143struct servent* getservbyname(const char *, const char *); 144struct servent* getservbyport(int, const char *); 145 146struct hostent* gethostbyaddr(const void *address, socklen_t length, int type); 147struct hostent* gethostbyname(const char *name); 148struct hostent* gethostbyname2(const char *name, int type); 149 150int getaddrinfo(const char *, const char *, const struct addrinfo *, 151 struct addrinfo **); 152int getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, 153 char *, socklen_t, int); 154void freeaddrinfo(struct addrinfo *); 155 156const char* gai_strerror(int); 157 158 159#ifdef __cplusplus 160} 161#endif 162 163#endif /* _NETDB_H_ */ 164