getipnodebyname, getipnodebyaddr, freehostent - obtiene nombres y
direcciones de host
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
struct hostent *getipnodebyname(const char *name,
int af, int flags,
int *error_num);
struct hostent *getipnodebyaddr(const void *addr,
size_t len, int af,
int *error_num);
void freehostent(struct hostent *ip);
Estas funciones están obsoletas. Use getaddrinfo(3)
y getnameinfo(3) en su lugar.
Las funciones getipnodebyname(3) y
getipnodebyaddr(3) devuelven los nombres y las direcciones de un
host. Estas funciones devuelven un puntero a la siguiente estructura:
struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
};
Estas funciones reemplazan a las funciones gethostbyname(3)
y gethostbyaddr(3) , las cuales sólo podían manejar la
familia de direcciones de red IPv4. Las funciones getipnodebyname(3)
y getipnodebyaddr(3) pueden manejar múltiples familias de
direcciones de red.
A diferencia de las funciones gethostby , estas funciones
devuelven punteros a memoria reservada dinámicamente. La
función freehostent(3) se emplea para liberar la memoria
dinámica asignada después de que el invocador deje de
necesitar la estructura hostent.
parámetros de getipnodebyname
La función getipnodebyname(3) busca direcciones de
red para el host especificado en el parámetro name. El
parámetro af especifica uno de los siguientes valores:
- AF_INET
- El parámetro name apunta a una dirección IPv4 en
formato decimal con puntos o a un nombre de host IPv4.
- AF_INET6
- El parámetro name apunta a una dirección IPv6 en
formato hexadecimal o a un nombre de host IPv6.
El parámetro flags especifica opciones adicionales.
Se puede especificar más de una opción mediante una
operación OR lógica de todas ellas. flags
debería contener el valor 0 si no se desean opciones adicionales.
- AI_V4MAPPED
- Esta opción se usa con AF_INET6 para solicitar una consulta
de direcciones IPv4 en lugar de direcciones IPv6; las direcciones IPv4
serán convertidas a direcciones IPv6.
- AI_ALL
- Esta opción se usa con AI_V4MAPPED para solicitar una
consulta de direcciones IPv4 y IPv6. Cualquier dirección IPv4
encontrada se convertirá a una dirección IPv6.
- AI_ADDRCONFIG
- Esta opción se usa con AF_INET6 para solicitar que las
consultas de direcciones IPv6 no se realicen a menos que el sistema tenga
al menos una dirección IPv6 asignada a una interfaz de red, y que
las consultas de direcciones IPv4 no se realicen a menos que el sistema
tenga al menos una dirección IPv4 asignada a una interfaz de red.
Esta opción puede usarse aislada o con la opción
AI_V4MAPPED.
- AI_ALL
- Esta opción es equivalente a (AI_ADDRCONFIG |
AI_V4MAPPED).
parámetros de getipnodebyaddr
La función getipnodebyaddr(3) busca el nombre del
host cuya dirección de red está especificada en el
parámetro addr. El parámetro af especifica uno
de los siguientes valores:
- AF_INET
- El parámetro addr apunta a una estructura in_addr y
len debe contener el valor sizeof(struct in_addr).
- AF_INET6
- El parámetro addr apunta a una estructura in6_addr y
len debe contener el valor sizeof(struct in6_addr).
Si ocurre un error se devuelve un puntero null, y error_num
contendrá un código de error de la siguiente lista:
- HOST_NOT_FOUND
- No se encontró el nombre de host o la dirección de red.
- NO_ADDRESS
- El servidor de nombres de dominio reconoció la dirección o
nombre de red, pero no devolvió ninguna respuesta. Ésto
puede suceder si el host tiene solamente direcciones IPv4 y se realiza una
consulta de direcciones IPv6 solamente, o viceversa.
- NO_RECOVERY
- El servidor de nombres de dominio devolvió una respuesta de fallo
permanente.
- TRY_AGAIN
- El servidor de nombres de dominio devolvió una respuesta de fallo
temporal. Puede que tenga mejor suerte la próxima vez.
Una consulta exitosa devuelve un puntero a una estructura
hostent que contiene los siguientes campos:
- h_name
- Nombre oficial del host.
- h_aliases
- Es un array de punteros a sinónimos no oficiales para el mismo
host. Este array termina en un puntero null.
- h_addrtype
- Es una copia del parámetro af a getipnodebyname(3) o
getipnodebyaddr(3). h_addrtype será siempre
AF_INET si el parámetro af era AF_INET.
será siempre AF_INET6 si el parámetro af era
AF_INET6.
- h_length
- Este campo contendrá el valor sizeof(struct in_addr) si
h_addrtype es AF_INET, y el valor sizeof(struct in6_addr) si
h_addrtype es AF_INET6.
- h_addr_list
- Es un array de uno o más punteros a estructuras de direcciones de
red para el host. Este array termina en un puntero null.
Estas funciones han estado presentes en glibc 2.1.91-95, pero
fueron eliminadas de nuevo. Muchos sistemas derivados de Unix las soportan,
pero todos las consideran obsoletas.