]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man3/gethostbyname.3
fanotify_init.2, fanotify.7: Document FAN_REPORT_TID
[thirdparty/man-pages.git] / man3 / gethostbyname.3
index 2b3d4926e24b9cf7bbf0af3b9cd7618cc81cd1e5..5b680e521f0c09f3a9982f98be53e794df3a6ec8 100644 (file)
@@ -1,5 +1,6 @@
 .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -19,6 +20,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" References consulted:
 .\"     Linux libc source code
 .\" Modified 2002-08-05, Michael Kerrisk
 .\" Modified 2004-10-31, Andries Brouwer
 .\"
-.TH GETHOSTBYNAME 3 2004-10-31 "" "Linux Programmer's Manual"
+.TH GETHOSTBYNAME 3 2017-09-15 "" "Linux Programmer's Manual"
 .SH NAME
 gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent,
-herror, hstrerror \- get network host entry
+h_errno,
+herror, hstrerror,
+gethostbyaddr_r,
+gethostbyname2, gethostbyname2_r, gethostbyname_r,
+gethostent_r \- get network host entry
 .SH SYNOPSIS
 .nf
 .B #include <netdb.h>
 .B extern int h_errno;
-.sp
+.PP
 .BI "struct hostent *gethostbyname(const char *" name );
-.sp
+
 .BR "#include <sys/socket.h>" "       /* for AF_INET */"
-.BI "struct hostent *gethostbyaddr(const void *" addr \
-", int " len ", int " type );
-.sp
+.BI "struct hostent *gethostbyaddr(const void *" addr ,
+.BI "                              socklen_t " len ", int " type );
+.PP
 .BI "void sethostent(int " stayopen );
-.sp
+.PP
 .B void endhostent(void);
-.sp
+.PP
 .BI "void herror(const char *" s );
-.sp
+.PP
 .BI "const char *hstrerror(int " err );
-.sp
+.PP
 /* System V/POSIX extension */
-.br
 .B struct hostent *gethostent(void);
-.sp
+.PP
 /* GNU extensions */
-.br
 .BI "struct hostent *gethostbyname2(const char *" name ", int " af );
-.sp
-.BI "int gethostent_r("
+.PP
+.B "int gethostent_r("
 .BI "        struct hostent *" ret ", char *" buf ", size_t " buflen ,
 .BI "        struct hostent **" result ", int *" h_errnop );
-.sp
+.PP
+.BI "int gethostbyaddr_r(const void *" addr ", socklen_t " len ", int " type ,
+.BI "        struct hostent *" ret ", char *" buf ", size_t " buflen ,
+.BI "        struct hostent **" result ", int *" h_errnop );
+.PP
 .BI "int gethostbyname_r(const char *" name ,
 .BI "        struct hostent *" ret ", char *" buf ", size_t " buflen ,
 .BI "        struct hostent **" result ", int *" h_errnop );
-.sp
+.PP
 .BI "int gethostbyname2_r(const char *" name ", int " af,
 .BI "        struct hostent *" ret ", char *" buf ", size_t " buflen ,
 .BI "        struct hostent **" result ", int *" h_errnop );
 .fi
+.PP
+.in -4n
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.in
+.PP
+.PD 0
+.ad l
+.BR gethostbyname2 (),
+.BR gethostent_r (),
+.BR gethostbyaddr_r (),
+.BR gethostbyname_r (),
+.BR gethostbyname2_r ():
+.RS 4
+.TP 4
+Since glibc 2.19:
+_DEFAULT_SOURCE
+.TP 4
+Glibc versions up to and including 2.19:
+_BSD_SOURCE || _SVID_SOURCE
+.RE
+.PD
+.PP
+.PD 0
+.BR herror (),
+.BR hstrerror ():
+.RS 4
+.TP 4
+Since glibc 2.19:
+_DEFAULT_SOURCE
+.TP 4
+Glibc 2.8 to 2.19:
+_BSD_SOURCE || _SVID_SOURCE
+.TP
+Before glibc 2.8:
+none
+.RE
+.PD
+.PP
+.PD 0
+.BR h_errno :
+.RS 4
+.TP 4
+Since glibc 2.19
+_DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L
+.TP 4
+Glibc 2.12 to 2.19:
+_BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L
+.TP
+Before glibc 2.12:
+none
+.RE
+.ad b
+.PD
 .SH DESCRIPTION
 The
+.BR gethostbyname* (),
+.BR gethostbyaddr* (),
+.BR herror (),
+and
+.BR hstrerror ()
+functions are obsolete.
+Applications should use
+.BR getaddrinfo (3),
+.BR getnameinfo (3),
+and
+.BR gai_strerror (3)
+instead.
+.PP
+The
 .BR gethostbyname ()
 function returns a structure of type
 .I hostent
@@ -85,12 +161,11 @@ for the given host
 .IR name .
 Here
 .I name
-is either a host name, or an IPv4 address in standard dot notation,
-or an IPv6 address in colon (and possibly dot) notation.
-(See RFC\ 1884 for the description of IPv6 addresses.)
+is either a hostname or an IPv4 address in standard dot notation (as for
+.BR inet_addr (3)).
 If
 .I name
-is an IPv4 or IPv6 address, no lookup is performed and
+is an IPv4 address, no lookup is performed and
 .BR gethostbyname ()
 simply copies
 .I name
@@ -117,7 +192,9 @@ for the file format).
 The current domain and its parents are searched unless \fIname\fP
 ends in a dot.
 .PP
-The \fBgethostbyaddr\fP() function returns a structure of type \fIhostent\fP
+The
+.BR gethostbyaddr ()
+function returns a structure of type \fIhostent\fP
 for the given host address \fIaddr\fP of length \fIlen\fP and address type
 \fItype\fP.
 Valid address types are
@@ -125,42 +202,63 @@ Valid address types are
 and
 .BR AF_INET6 .
 The host address argument is a pointer to a struct of a type depending
-on the address type, for example a \fBstruct in_addr *\fP (probably
-obtained via a call to \fIinet_addr\fP()) for address type AF_INET.
+on the address type, for example a \fIstruct in_addr *\fP (probably
+obtained via a call to
+.BR inet_addr (3))
+for address type
+.BR AF_INET .
 .PP
-The \fBsethostent\fP() function specifies, if \fIstayopen\fP is true (1),
+The
+.BR sethostent ()
+function specifies, if \fIstayopen\fP is true (1),
 that a connected TCP socket should be used for the name server queries and
 that the connection should remain open during successive queries.
 Otherwise, name server queries will use UDP datagrams.
 .PP
-The \fBendhostent\fP() function ends the use of a TCP connection for name
+The
+.BR endhostent ()
+function ends the use of a TCP connection for name
 server queries.
 .PP
-The (obsolete) \fBherror\fP() function prints the error message associated
-with the current value of \fIh_errno\fP on stderr.
+The (obsolete)
+.BR herror ()
+function prints the error message associated
+with the current value of \fIh_errno\fP on \fIstderr\fP.
 .PP
-The (obsolete) \fBhstrerror\fP() function takes an error number
+The (obsolete)
+.BR hstrerror ()
+function takes an error number
 (typically \fIh_errno\fP) and returns the corresponding message string.
 .PP
-The domain name queries carried out by \fBgethostbyname\fP() and
-\fBgethostbyaddr\fP() use a combination of any or all of the name server
-.BR named (8),
-a broken out line from \fI/etc/hosts\fP, and the Network
-Information Service (NIS or YP), depending upon the contents of the
-\fIorder\fP line in
-.IR /etc/host.conf .
-.\" (See
-.\" .BR resolv+ (8)).
-The default action is to query
-.BR named (8),
-followed by
-.IR /etc/hosts .
+The domain name queries carried out by
+.BR gethostbyname ()
+and
+.BR gethostbyaddr ()
+rely on the Name Service Switch
+.RB ( nsswitch.conf (5))
+configured sources or a local name server
+.RB ( named (8)).
+The default action is to query the Name Service Switch
+.RB ( nsswitch.conf(5))
+configured sources, failing that, a local name server
+.RB ( named (8)).
+.\"
+.SS Historical
+The
+.BR nsswitch.conf (5)
+file is the modern way of controlling the order of host lookups.
+.PP
+In glibc 2.4 and earlier, the
+.I order
+keyword was used to control the order of host lookups as defined in
+.IR /etc/host.conf
+.RB ( host.conf (5)).
+.PP
 .PP
 The \fIhostent\fP structure is defined in \fI<netdb.h>\fP as follows:
-.sp
-.in +0.5i
-.nf
-.ne 7
+.PP
+.in +4n
+.EX
 struct hostent {
     char  *h_name;            /* official name of host */
     char **h_aliases;         /* alias list */
@@ -169,8 +267,8 @@ struct hostent {
     char **h_addr_list;       /* list of addresses */
 }
 #define h_addr h_addr_list[0] /* for backward compatibility */
-.fi
-.in -0.5i
+.EE
+.in
 .PP
 The members of the \fIhostent\fP structure are:
 .TP
@@ -178,7 +276,7 @@ The members of the \fIhostent\fP structure are:
 The official name of the host.
 .TP
 .I h_aliases
-An array of alternative names for the host, terminated by a NULL pointer.
+An array of alternative names for the host, terminated by a null pointer.
 .TP
 .I h_addrtype
 The type of address; always
@@ -192,18 +290,18 @@ The length of the address in bytes.
 .TP
 .I h_addr_list
 An array of pointers to network addresses for the host (in network byte
-order), terminated by a NULL pointer.
+order), terminated by a null pointer.
 .TP
 .I h_addr
 The first address in \fIh_addr_list\fP for backward compatibility.
-.SH "RETURN VALUE"
+.SH RETURN VALUE
 The
 .BR gethostbyname ()
 and
 .BR gethostbyaddr ()
 functions return the
 .I hostent
-structure or a NULL pointer if an error occurs.
+structure or a null pointer if an error occurs.
 On error, the
 .I h_errno
 variable holds an error number.
@@ -214,11 +312,17 @@ The variable \fIh_errno\fP can have the following values:
 .B HOST_NOT_FOUND
 The specified host is unknown.
 .TP
-.BR NO_ADDRESS " or " NO_DATA
+.BR NO_DATA
 The requested name is valid but does not have an IP address.
+Another type of request to the name server for this domain
+may return an answer.
+The constant
+.BR NO_ADDRESS
+is a synonym for
+.BR NO_DATA .
 .TP
 .B NO_RECOVERY
-A non-recoverable name server error occurred.
+A nonrecoverable name server error occurred.
 .TP
 .B TRY_AGAIN
 A temporary error occurred on an authoritative name server.
@@ -233,54 +337,101 @@ host database file
 .TP
 .I /etc/nsswitch.conf
 name service switch configuration
-.SH "CONFORMING TO"
-4.3BSD, POSIX.1-2001.
-.SH "SYSTEM V/POSIX EXTENSION"
-POSIX requires the
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbw18 lb lbw29
+l l l.
+Interface      Attribute       Value
+T{
+.BR gethostbyname ()
+T}     Thread safety   T{
+MT-Unsafe race:hostbyname env
+.br
+locale
+T}
+T{
+.BR gethostbyaddr ()
+T}     Thread safety   T{
+MT-Unsafe race:hostbyaddr env
+.br
+locale
+T}
+T{
+.BR sethostent (),
+.br
+.BR endhostent (),
+.br
+.BR gethostent_r ()
+T}     Thread safety   T{
+MT-Unsafe race:hostent env
+.br
+locale
+T}
+T{
+.BR herror (),
+.br
+.BR hstrerror ()
+T}     Thread safety   MT-Safe
+T{
 .BR gethostent ()
-call, that should return the next entry in the host data base.
-When using DNS/BIND this does not make much sense, but it may
-be reasonable if the host data base is a file that can be read
-line by line.
-On many systems a routine of this name reads
-from the file
-.IR /etc/hosts .
-.\" e.g. Linux, FreeBSD, Unixware, HP-UX
-It may be available only when the library was built without DNS support.
-.\" e.g. FreeBSD, AIX
-The glibc version will ignore ipv6 entries.
-This function is not reentrant,
-and glibc adds a reentrant version
-.BR gethostent_r ().
-.SH "GNU EXTENSIONS"
-Glibc2 also has a
+T}     Thread safety   T{
+MT-Unsafe race:hostent
+.br
+race:hostentbuf env locale
+T}
+T{
 .BR gethostbyname2 ()
-that works like
+T}     Thread safety   T{
+MT-Unsafe race:hostbyname2
+.br
+env locale
+T}
+T{
+.BR gethostbyaddr_r (),
+.BR gethostbyname_r (),
+.BR gethostbyname2_r ()
+T}     Thread safety   MT-Safe env locale
+.TE
+.sp 1
+In the above table,
+.I hostent
+in
+.I race:hostent
+signifies that if any of the functions
+.BR sethostent (),
+.BR gethostent (),
+.BR gethostent_r (),
+or
+.BR endhostent ()
+are used in parallel in different threads of a program,
+then data races could occur.
+.SH CONFORMING TO
+POSIX.1-2001 specifies
 .BR gethostbyname (),
-but permits to specify the address family to which the address must belong.
-.LP
-Glibc2 also has reentrant versions
-.BR gethostbyname_r ()
+.BR gethostbyaddr (),
+.BR sethostent (),
+.BR endhostent (),
+.BR gethostent (),
 and
-.BR gethostbyname2_r ().
-These return 0 on success and non-zero on error.
-The result of the call
-is now stored in the struct with address
-.IR ret .
-After the call,
-.RI * result
-will be NULL on error or point to the result on success.
-Auxiliary data is stored in the buffer
-.I buf
-of length
-.IR buflen .
-(If the buffer is too small, these functions will return
-.BR ERANGE .)
-No global variable
-.I h_errno
-is modified, but the address of a variable in which to store error numbers
-is passed in
-.IR h_errnop .
+.IR h_errno ;
+.BR gethostbyname (),
+.BR gethostbyaddr (),
+and
+.IR h_errno
+are marked obsolescent in that standard.
+POSIX.1-2008 removes the specifications of
+.BR gethostbyname (),
+.BR gethostbyaddr (),
+and
+.IR h_errno ,
+recommending the use of
+.BR getaddrinfo (3)
+and
+.BR getnameinfo (3)
+instead.
 .SH NOTES
 The functions
 .BR gethostbyname ()
@@ -291,10 +442,17 @@ later calls.
 Copying the
 .I struct hostent
 does not suffice, since it contains pointers; a deep copy is required.
-.LP
-The SUS-v2 standard is buggy and declares the
+.PP
+In the original BSD implementation the
+.I len
+argument
+of
+.BR gethostbyname ()
+was an
+.IR int .
+The SUSv2 standard is buggy and declares the
 .I len
-parameter of
+argument of
 .BR gethostbyaddr ()
 to be of type
 .IR size_t .
@@ -306,27 +464,82 @@ is not.
 POSIX.1-2001 makes it
 .IR socklen_t ,
 which is OK.)
-.LP
+See also
+.BR accept (2).
+.PP
 The BSD prototype for
 .BR gethostbyaddr ()
 uses
-.I const char *
+.I "const char\ *"
 for the first argument.
-.LP
-POSIX.1-2001 marks
-.BR gethostbyaddr ()
+.SS System V/POSIX extension
+POSIX requires the
+.BR gethostent ()
+call, which should return the next entry in the host data base.
+When using DNS/BIND this does not make much sense, but it may
+be reasonable if the host data base is a file that can be read
+line by line.
+On many systems, a routine of this name reads
+from the file
+.IR /etc/hosts .
+.\" e.g., Linux, FreeBSD, UnixWare, HP-UX
+It may be available only when the library was built without DNS support.
+.\" e.g., FreeBSD, AIX
+The glibc version will ignore ipv6 entries.
+This function is not reentrant,
+and glibc adds a reentrant version
+.BR gethostent_r ().
+.SS GNU extensions
+Glibc2 also has a
+.BR gethostbyname2 ()
+that works like
+.BR gethostbyname (),
+but permits to specify the address family to which the address must belong.
+.PP
+Glibc2 also has reentrant versions
+.BR gethostent_r (),
+.BR gethostbyaddr_r (),
+.BR gethostbyname_r ()
 and
+.BR gethostbyname2_r ().
+The caller supplies a
+.I hostent
+structure
+.I ret
+which will be filled in on success, and a temporary work buffer
+.I buf
+of size
+.IR buflen .
+After the call,
+.I result
+will point to the result on success.
+In case of an error
+or if no entry is found
+.I result
+will be NULL.
+The functions return 0 on success and a nonzero error number on failure.
+In addition to the errors returned by the nonreentrant
+versions of these functions, if
+.I buf
+is too small, the functions will return
+.BR ERANGE ,
+and the call should be retried with a larger buffer.
+The global variable
+.I h_errno
+is not modified, but the address of a variable in which to store error numbers
+is passed in
+.IR h_errnop .
+.SH BUGS
 .BR gethostbyname ()
-obsolescent.
-See
-.BR getaddrinfo (3),
-.BR getnameinfo (3),
-.BR gai_strerror (3).
-.SH "SEE ALSO"
+does not recognize components of a dotted IPv4 address string
+that are expressed in hexadecimal.
+.\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482973
+.SH SEE ALSO
 .BR getaddrinfo (3),
-.BR getipnodebyaddr (3),
-.BR getipnodebyname (3),
+.\" .BR getipnodebyaddr (3),
+.\" .BR getipnodebyname (3),
 .BR getnameinfo (3),
+.BR inet (3),
 .BR inet_ntop (3),
 .BR inet_pton (3),
 .BR resolver (3),