Provided by:
manpages-es_1.55-10_all 
NOMBRE
gethostbyname, gethostbyaddr, sethostent, endhostent, herror, hstrerror
- obtienen una entrada de anfitrion de red
SINOPSIS
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);
#include <sys/socket.h> /* para AF_INET */
struct hostent *gethostbyaddr(const char *addr,
int len, int type);
void sethostent(int stayopen);
void endhostent(void);
void herror(const char *s);
const char *hstrerror(int err);
/* extensiones de GNU */
struct hostent *gethostbyname2(const char *name, int af);
int gethostbyname_r (const char *name,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyname2_r (const char *name, int af,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
DESCRIPCI'ON
La funcion gethostbyname() devuelve una estructura del tipo hostent
para el anfitrion (host) dado name. Aqui, name es ora un nombre de
anfitrion, ora una direccion IPv4 en la notacion normal de puntos, ora
una direccion IPv6 en la notacion de dos puntos (y posiblemente de
puntos). (Vea la RFC 1884 para una descripcion de las direcciones en
IPv6). Si name es una direccion IPv4 o IPv6, no se realiza ninguna
busqueda y gethostbyname() simplemente copia name en el campo h_name y
su equivalente struct in_addr en el campo h_addr_list[0] de la
estructura hostent devuelta. Si name no termina con un punto y la
variable de ambiente HOSTALIASES esta asignada, se buscara primero name
en el fichero de alias senalado por HOSTALIASES (vea hostname(7) para
saber como es el formato del fichero). Se buscan el dominio actual y
sus ancestros a menos que name termine en punto.
La funcion gethostbyaddr() devuelve una estructura del tipo hostent
para la direccion de anfitrion dada addr de longitud len y de tipo
type. El unico tipo de direccion valido actualmente es AF_INET.
La funcion sethostent() especifica, si stayopen es true (1), que se
deberia emplear un conector (socket) TCP para las interrogaciones al
servidor de nombres y que la conexion deberia permanecer abierta
durante sucesivas preguntas. De otro modo, las peticiones al servidor
de nombres utilizaran datagramas UDP.
La funcion endhostent() termina el uso de una conexion TCP para las
peticiones al servidor de nombres.
La (obsoleta) funcion herror() muestra en stderr un mensaje de error
asociado con el valor actual de h_errno.
La (obsoleta) funcion hstrerror() toma un numero de error
(habitualmente h_errno) y devuelve la cadena del mensaje
correspondiente.
Las preguntas al servidor de nombres llevadas a cabo por
gethostbyname() y gethostbyaddr() usan una combinacion de uno o todos
los servidores de nombres named(8), una declaracion en /etc/hosts, y el
Servicio de Informacion de Red (NIS, antes Paginas Amarillas, YP),
dependiendo de los contenidos de la linea order en /etc/host.conf. (Vea
resolv+(8)). La accion predeterminada es preguntar a named(8), seguido
por /etc/hosts.
La estructura hostent se define en <netdb.h> como sigue:
struct hostent {
char *h_name; /* nombre oficial del anfitrion */
char **h_aliases; /* lista de alias */
int h_addrtype; /* tipo direccion anfitrion */
int h_length; /* longitud de la direccion */
char **h_addr_list; /* lista de direcciones */
}
#define h_addr h_addr_list[0] /* por compatibilidad atras */
Los miembros de la estructura hostent son:
h_name El nombre oficial de un anfitrion.
h_aliases
Una cadena terminada en el caracter nulo de los nombres
alternativos para el anfitrion.
h_addrtype
El tipo de direccion; siempre AF_INET de momento.
h_length
La longitud de la direccion en bytes.
h_addr_list
Una cadena terminada en nulo de direcciones de red para el
anfitrion en orden de bytes de red.
h_addr La primera direccion en h_addr_list por compatibilidad hacia
atras.
VALOR DEVUELTO
Las funciones gethostbyname() y gethostbyaddr() devuelven la estructura
hostent, o un puntero NULL si ha ocurrido un error. En caso de error,
la variable h_errno contiene un numero de error.
ERRORES
La variable h_errno puede tener los siguientes valores:
HOST_NOT_FOUND
El anfitrion especificado es desconocido.
NO_ADDRESS o NO_DATA
El nombre pedido es valido pero no tiene una dirreccion IP.
NO_RECOVERY
Ha ocurrido un error no recuperable del servidor de nombres.
TRY_AGAIN
Ha ocurrido un error temporal sobre un servidor de nombres con
autoridad. Intente luego mas tarde.
FICHEROS
/etc/host.conf
fichero de configuracion del resolvedor
/etc/hosts
fichero de base de datos de anfitriones
CONFORME A
BSD 4.3.
OBSERVACIONES
El estandar SUS-v2 contiene fallos y declara el parametro len de
gethostbyaddr() de tipo size_t. (Esto esta equivocado, porque tiene
que ser de tipo int, y size_t no lo es. POSIX 1003.1-2001 lo especifica
de tipo socklen_t, lo cual es correcto.)
Las funciones gethostbyname() y gethostbyaddr() pueden devolver
punteros a datos estaticos, que pueden ser sobreescritos por llamadas
posteriores. Copiar la estructura hostent no es suficiente, puesto que
contiene punteros - se requiere una copia en profundidad.
Glibc2 tambien tiene una funcion gethostbyname2() que hace lo mismo que
gethostbyname(), pero permite especificar la familia de direcciones a
la que la direccion debe pertenecer.
Glibc2 tambien tiene versiones reentrantes gethostbyname_r() y
gethostbyname2_r(). Estas devuelven 0 en caso de exito y un valor
distinto de cero en caso de error. El resultado de la llamada es
almacenado en la estructura con la direccion ret. Despues de la
llamada, *result valdra NULL en caso de error o apuntara al resultado
en caso de exito. Los datos auxiliares son almacenados en el buffer
buf de longitud buflen. (Si el buffer es demasiado pequeno, estas
funciones devolveran ERANGE.) Ninguna variable global h_errno es
modificada, pero se pasa en h_errnop la direccion de una variable donde
almacenar numeros de error.
POSIX 1003.1-2001 senala que gethostbyaddr() y gethostbyname() estan
anticuadas, e introduce
struct hostent *getipnodebyaddr (const void *restrict addr,
socklen_t len, int type, int *restrict error_num);
struct hostent *getipnodebyname (const char *name,
int type, int flags, int *error_num);
V'EASE TAMBI'EN
resolver(3), hosts(5), hostname(7), resolv+(8), named(8)