1gethostbyname(3)           Library Functions Manual           gethostbyname(3)
2
3
4

NAME

6       gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent, h_er‐
7       rno, herror,  hstrerror,  gethostbyaddr_r,  gethostbyname2,  gethostby‐
8       name2_r, gethostbyname_r, gethostent_r - get network host entry
9

LIBRARY

11       Standard C library (libc, -lc)
12

SYNOPSIS

14       #include <netdb.h>
15
16       void sethostent(int stayopen);
17       void endhostent(void);
18
19       [[deprecated]] extern int h_errno;
20
21       [[deprecated]] struct hostent *gethostbyname(const char *name);
22       [[deprecated]] struct hostent *gethostbyaddr(const void addr[.len],
23                                                    socklen_t len, int type);
24
25       [[deprecated]] void herror(const char *s);
26       [[deprecated]] const char *hstrerror(int err);
27
28       /* System V/POSIX extension */
29       struct hostent *gethostent(void);
30
31       /* GNU extensions */
32       [[deprecated]]
33       struct hostent *gethostbyname2(const char *name, int af);
34
35       int gethostent_r(struct hostent *restrict ret,
36                        char buf[restrict .buflen], size_t buflen,
37                        struct hostent **restrict result,
38                        int *restrict h_errnop);
39
40       [[deprecated]]
41       int gethostbyaddr_r(const void addr[restrict .len], socklen_t len,
42                        int type,
43                        struct hostent *restrict ret,
44                        char buf[restrict .buflen], size_t buflen,
45                        struct hostent **restrict result,
46                        int *restrict h_errnop);
47       [[deprecated]]
48       int gethostbyname_r(const char *restrict name,
49                        struct hostent *restrict ret,
50                        char buf[restrict .buflen], size_t buflen,
51                        struct hostent **restrict result,
52                        int *restrict h_errnop);
53       [[deprecated]]
54       int gethostbyname2_r(const char *restrict name, int af,
55                        struct hostent *restrict ret,
56                        char buf[restrict .buflen], size_t buflen,
57                        struct hostent **restrict result,
58                        int *restrict h_errnop);
59
60   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
61
62       gethostbyname2(), gethostent_r(), gethostbyaddr_r(), gethostbyname_r(),
63       gethostbyname2_r():
64           Since glibc 2.19:
65               _DEFAULT_SOURCE
66           glibc up to and including 2.19:
67               _BSD_SOURCE || _SVID_SOURCE
68
69       herror(), hstrerror():
70           Since glibc 2.19:
71               _DEFAULT_SOURCE
72           glibc 2.8 to glibc 2.19:
73               _BSD_SOURCE || _SVID_SOURCE
74           Before glibc 2.8:
75               none
76
77       h_errno:
78           Since glibc 2.19
79               _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L
80           glibc 2.12 to glibc 2.19:
81               _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L
82           Before glibc 2.12:
83               none
84

DESCRIPTION

86       The gethostbyname*(), gethostbyaddr*(), herror(), and hstrerror() func‐
87       tions  are  obsolete.  Applications should use getaddrinfo(3), getname‐
88       info(3), and gai_strerror(3) instead.
89
90       The sethostent() function specifies, if stayopen is true  (1),  that  a
91       connected  TCP  socket  should  be used for the name server queries and
92       that the connection should remain open during successive queries.  Oth‐
93       erwise, name server queries will use UDP datagrams.
94
95       The  endhostent()  function  ends  the use of a TCP connection for name
96       server queries.
97
98       The gethostbyname() function returns a structure of  type  hostent  for
99       the given host name.  Here name is either a hostname or an IPv4 address
100       in standard dot notation (as for inet_addr(3)).  If name is an IPv4 ad‐
101       dress,  no  lookup  is performed and gethostbyname() simply copies name
102       into the h_name field  and  its  struct  in_addr  equivalent  into  the
103       h_addr_list[0]  field  of  the  returned  hostent  structure.   If name
104       doesn't end in a dot and the environment variable HOSTALIASES  is  set,
105       the  alias  file  pointed  to by HOSTALIASES will first be searched for
106       name (see hostname(7) for the file format).  The current domain and its
107       parents are searched unless name ends in a dot.
108
109       The  gethostbyaddr()  function  returns a structure of type hostent for
110       the given host address addr of length len and address type type.  Valid
111       address  types  are  AF_INET  and AF_INET6 (defined in <sys/socket.h>).
112       The host address argument is a pointer to a struct of a type  depending
113       on  the address type, for example a struct in_addr * (probably obtained
114       via a call to inet_addr(3)) for address type AF_INET.
115
116       The (obsolete) herror() function prints the  error  message  associated
117       with the current value of h_errno on stderr.
118
119       The  (obsolete)  hstrerror()  function takes an error number (typically
120       h_errno) and returns the corresponding message string.
121
122       The domain name queries carried out  by  gethostbyname()  and  gethost‐
123       byaddr()  rely on the Name Service Switch (nsswitch.conf(5)) configured
124       sources or a local name server (named(8)).  The default  action  is  to
125       query  the  Name  Service Switch (nsswitch.conf(5)) configured sources,
126       failing that, a local name server (named(8)).
127
128   Historical
129       The nsswitch.conf(5) file is the modern way of controlling the order of
130       host lookups.
131
132       In glibc 2.4 and earlier, the order keyword was used to control the or‐
133       der of host lookups as defined in /etc/host.conf (host.conf(5)).
134
135       The hostent structure is defined in <netdb.h> as follows:
136
137           struct hostent {
138               char  *h_name;            /* official name of host */
139               char **h_aliases;         /* alias list */
140               int    h_addrtype;        /* host address type */
141               int    h_length;          /* length of address */
142               char **h_addr_list;       /* list of addresses */
143           }
144           #define h_addr h_addr_list[0] /* for backward compatibility */
145
146       The members of the hostent structure are:
147
148       h_name The official name of the host.
149
150       h_aliases
151              An array of alternative names for the host, terminated by a null
152              pointer.
153
154       h_addrtype
155              The type of address; always AF_INET or AF_INET6 at present.
156
157       h_length
158              The length of the address in bytes.
159
160       h_addr_list
161              An  array of pointers to network addresses for the host (in net‐
162              work byte order), terminated by a null pointer.
163
164       h_addr The first address in h_addr_list for backward compatibility.
165

RETURN VALUE

167       The gethostbyname() and gethostbyaddr() functions  return  the  hostent
168       structure  or a null pointer if an error occurs.  On error, the h_errno
169       variable holds an error number.  When non-NULL, the  return  value  may
170       point at static data, see the notes below.
171

ERRORS

173       The variable h_errno can have the following values:
174
175       HOST_NOT_FOUND
176              The specified host is unknown.
177
178       NO_DATA
179              The  requested  name  is  valid but does not have an IP address.
180              Another type of request to the name server for this  domain  may
181              return  an  answer.   The  constant  NO_ADDRESS is a synonym for
182              NO_DATA.
183
184       NO_RECOVERY
185              A nonrecoverable name server error occurred.
186
187       TRY_AGAIN
188              A temporary error occurred on an authoritative name server.  Try
189              again later.
190

FILES

192       /etc/host.conf
193              resolver configuration file
194
195       /etc/hosts
196              host database file
197
198       /etc/nsswitch.conf
199              name service switch configuration
200

ATTRIBUTES

202       For  an  explanation  of  the  terms  used  in  this  section,  see at‐
203       tributes(7).
204
205       ┌───────────────────┬───────────────┬──────────────────────────────────┐
206Interface          Attribute     Value                            
207       ├───────────────────┼───────────────┼──────────────────────────────────┤
208gethostbyname()    │ Thread safety │ MT-Unsafe race:hostbyname env    │
209       │                   │               │ locale                           │
210       ├───────────────────┼───────────────┼──────────────────────────────────┤
211gethostbyaddr()    │ Thread safety │ MT-Unsafe race:hostbyaddr env    │
212       │                   │               │ locale                           │
213       ├───────────────────┼───────────────┼──────────────────────────────────┤
214sethostent(),      │ Thread safety │ MT-Unsafe race:hostent env       │
215endhostent(),      │               │ locale                           │
216gethostent_r()     │               │                                  │
217       ├───────────────────┼───────────────┼──────────────────────────────────┤
218herror(),          │ Thread safety │ MT-Safe                          │
219hstrerror()        │               │                                  │
220       ├───────────────────┼───────────────┼──────────────────────────────────┤
221gethostent()       │ Thread safety │ MT-Unsafe race:hostent           │
222       │                   │               │ race:hostentbuf env locale       │
223       ├───────────────────┼───────────────┼──────────────────────────────────┤
224gethostbyname2()   │ Thread safety │ MT-Unsafe race:hostbyname2 env   │
225       │                   │               │ locale                           │
226       ├───────────────────┼───────────────┼──────────────────────────────────┤
227gethostbyaddr_r(), │ Thread safety │ MT-Safe env locale               │
228gethostbyname_r(), │               │                                  │
229gethostbyname2_r() │               │                                  │
230       └───────────────────┴───────────────┴──────────────────────────────────┘
231       In the above table, hostent in race:hostent signifies that  if  any  of
232       the  functions  sethostent(),  gethostent(), gethostent_r(), or endhos‐
233       tent() are used in parallel in different threads of a program, then da‐
234       ta races could occur.
235

STANDARDS

237       sethostent()
238       endhostent()
239       gethostent()
240              POSIX.1-2008.
241
242       gethostent_r()
243              GNU.
244
245       Others:
246              None.
247

HISTORY

249       sethostent()
250       endhostent()
251       gethostent()
252              POSIX.1-2001.
253
254       gethostbyname()
255       gethostbyaddr()
256       h_errno
257              Marked  obsolescent  in  POSIX.1-2001.  Removed in POSIX.1-2008,
258              recommending the use of getaddrinfo(3)  and  getnameinfo(3)  in‐
259              stead.
260

NOTES

262       The  functions  gethostbyname() and gethostbyaddr() may return pointers
263       to static data, which may be overwritten by later calls.   Copying  the
264       struct  hostent  does  not  suffice, since it contains pointers; a deep
265       copy is required.
266
267       In the original BSD implementation the len argument of  gethostbyname()
268       was  an int.  The SUSv2 standard is buggy and declares the len argument
269       of gethostbyaddr() to be of type size_t.  (That is  wrong,  because  it
270       has  to  be  int,  and size_t is not.  POSIX.1-2001 makes it socklen_t,
271       which is OK.)  See also accept(2).
272
273       The BSD prototype for gethostbyaddr() uses const char * for  the  first
274       argument.
275
276   System V/POSIX extension
277       POSIX  requires the gethostent() call, which should return the next en‐
278       try in the host data base.  When using DNS/BIND this does not make much
279       sense,  but  it  may be reasonable if the host data base is a file that
280       can be read line by line.  On many systems,  a  routine  of  this  name
281       reads  from the file /etc/hosts.  It may be available only when the li‐
282       brary was built without DNS support.  The  glibc  version  will  ignore
283       ipv6  entries.   This function is not reentrant, and glibc adds a reen‐
284       trant version gethostent_r().
285
286   GNU extensions
287       glibc2 also has a gethostbyname2() that works like gethostbyname(), but
288       permits to specify the address family to which the address must belong.
289
290       glibc2  also  has reentrant versions gethostent_r(), gethostbyaddr_r(),
291       gethostbyname_r(), and gethostbyname2_r().  The caller supplies a  hos‐
292       tent  structure ret which will be filled in on success, and a temporary
293       work buffer buf of size buflen.  After the call, result will  point  to
294       the result on success.  In case of an error or if no entry is found re‐
295       sult will be NULL.  The functions return 0 on success and a nonzero er‐
296       ror  number on failure.  In addition to the errors returned by the non‐
297       reentrant versions of these functions, if buf is too small,  the  func‐
298       tions  will return ERANGE, and the call should be retried with a larger
299       buffer.  The global variable h_errno is not modified, but  the  address
300       of a variable in which to store error numbers is passed in h_errnop.
301

BUGS

303       gethostbyname()  does not recognize components of a dotted IPv4 address
304       string that are expressed in hexadecimal.
305

SEE ALSO

307       getaddrinfo(3), getnameinfo(3),  inet(3),  inet_ntop(3),  inet_pton(3),
308       resolver(3), hosts(5), nsswitch.conf(5), hostname(7), named(8)
309
310
311
312Linux man-pages 6.04              2023-03-30                  gethostbyname(3)
Impressum