1 .\" $KAME: getipnodebyname.3,v 1.6 2000/08/09 21:16:17 itojun Exp $
3 .\" Copyright (c) 1983, 1987, 1991, 1993
4 .\" The Regents of the University of California. All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\" notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\" notice, this list of conditions and the following disclaimer in the
13 .\" documentation and/or other materials provided with the distribution.
14 .\" 3. All advertising materials mentioning features or use of this software
15 .\" must display the following acknowledgement:
16 .\" This product includes software developed by the University of
17 .\" California, Berkeley and its contributors.
18 .\" 4. Neither the name of the University nor the names of its contributors
19 .\" may be used to endorse or promote products derived from this software
20 .\" without specific prior written permission.
22 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 .\" From: @(#)gethostbyname.3 8.4 (Berkeley) 5/25/95
45 .Nd nodename-to-address and address-to-nodename translation
53 .Ft "struct hostent *"
54 .Fn getipnodebyname "const char *name" "int af" "int flags" "int *error_num"
55 .Ft "struct hostent *"
56 .Fn getipnodebyaddr "const void *src" "size_t len" "int af" "int *error_num"
58 .Fn freehostent "struct hostent *ptr"
65 functions are very similar to
70 The functions cover all the functionalities provided by the older ones,
71 and provide better interface to programmers.
72 The functions require additional arguments,
76 for specifying address family and operation mode.
77 The additional arguments allow programmer to get address for a nodename,
78 for specific address family
83 The functions also require an additional pointer argument,
85 to return the appropriate error code,
86 to support thread safe error code returns.
88 The type and usage of the return value,
97 argument can be either a node name or a numeric address
99 (i.e., a dotted-decimal IPv4 address or an IPv6 hex address).
102 argument specifies the address family, either
108 argument specifies the types of addresses that are searched for,
109 and the types of addresses that are returned.
110 We note that a special flags value of
113 should handle most applications.
114 That is, porting simple applications to use IPv6 replaces the call
116 hptr = gethostbyname(name);
121 hptr = getipnodebyname(name, AF_INET6, AI_DEFAULT, &error_num);
124 Applications desiring finer control over the types of addresses
125 searched for and returned, can specify other combinations of the
133 implies a strict interpretation of the
144 then the caller wants only IPv4 addresses.
148 If successful, the IPv4 addresses are returned and the
152 structure will be 4, else the function returns a
162 then the caller wants only IPv6 addresses.
166 If successful, the IPv6 addresses are returned and the
170 structure will be 16, else the function returns a
175 Other constants can be logically-ORed into the
177 argument, to modify the behavior of the function.
182 flag is specified along with an
186 then the caller will accept IPv4-mapped IPv6 addresses.
189 records are found then a query is made for
191 records and any found are returned as IPv4-mapped IPv6 addresses
196 flag is ignored unless
203 flag is exact same as the
205 flag only if the kernel supports IPv4-mapped IPv6 address.
209 flag is used in conjunction with the
211 flag, and only used with the IPv6 address family.
214 is logically or'd with
216 flag then the caller wants all addresses: IPv6 and IPv4-mapped IPv6.
217 A query is first made for
219 records and if successful, the
220 IPv6 addresses are returned.
221 Another query is then made for
223 records and any found are returned as IPv4-mapped IPv6 addresses.
226 Only if both queries fail does the function
230 This flag is ignored unless af equals
242 flag specifies that a query for
245 should occur only if the node has at least one IPv6 source
246 address configured and a query for
248 records should occur only if the node has at least one IPv4 source address
251 For example, if the node has no IPv6 source addresses configured,
254 equals AF_INET6, and the node name being looked up has both
262 specified, the function returns a
271 records are returned as IPv4-mapped IPv6 addresses;
274 The special flags value of
278 #define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
283 function must allow the
285 argument to be either a node name or a literal address string
286 (i.e., a dotted-decimal IPv4 address or an IPv6 hex address).
287 This saves applications from having to call
289 to handle literal address strings.
292 argument is a literal address string,
295 argument is always ignored.
297 There are four scenarios based on the type of literal address string
301 The two simple cases are when
303 is a dotted-decimal IPv4 address and
309 is an IPv6 hex address and
314 returned hostent structure are:
316 points to a copy of the
335 is a pointer to the 4-byte or 16-byte binary address,
344 is a dotted-decimal IPv4 address and
351 an IPv4-mapped IPv6 address is returned:
353 points to an IPv6 hex address containing the IPv4-mapped IPv6 address,
364 is a pointer to the 16-byte binary address, and
372 is an IPv6 hex address and
376 The function's return value is a
378 pointer and the value pointed to by
386 takes almost the same argument as
387 .Xr gethostbyaddr 3 ,
388 but adds a pointer to return an error number.
389 Additionally it takes care of IPv4-mapped IPv6 addresses,
390 and IPv4-compatible IPv6 addresses.
397 dynamically allocate the structure to be returned to the caller.
401 reclaims memory region allocated and returned by
404 .Fn getipnodebyaddr .
407 .Bl -tag -width /etc/nsswitch.conf -compact
409 .It Pa /etc/nsswitch.conf
410 .It Pa /etc/resolv.conf
422 The integer values pointed to by
424 may then be checked to see whether this is a temporary failure
425 or an invalid or unknown host.
426 The meanings of each error code are described in
427 .Xr gethostbyname 3 .
431 .Xr gethostbyaddr 3 ,
432 .Xr gethostbyname 3 ,
435 .Xr nsswitch.conf 5 ,
445 .%T Basic Socket Interface Extensions for IPv6
451 The implementation first appeared in KAME advanced networking kit.
460 .Dq Basic Socket Interface Extensions for IPv6
464 Although the current implementation is otherwise thread-safe, using
465 it in conjunction with
468 .Xr gethostbyname 3 )
471 breaks the thread-safety of both.
478 do not handle scoped IPv6 address properly.
479 If you use these functions,
480 your program will not be able to handle scoped IPv6 addresses.
481 For IPv6 address manipulation,
487 The text was shamelessly copied from RFC2553.