getnameinfo(3) | Manual del Programador de UNIX | getnameinfo(3) |
getnameinfo - traducción dirección-a-nombre de forma independiente del protocolo
#include <sys/socket.h> #include <netdb.h> int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
La función getnameinfo(3) se define para la traducción dirección-a-nombrenodo de manera independiente del protocolo. Combina la funcionalidad de gethostbyaddr(3) y getservbyport(3) y es la inversa de getaddrinfo(3). El argumento sa es un puntero a una estructura genérica de dirección de conector (socket) (de tipo sockaddr_in o sockaddr_in6) de tamaño salen que contiene la dirección IP y el número del puerto de entrada. Los argumentos host y serv son punteros a buffers (de tamaño hostlen y servlen respectivamente) que se utilizan para almacenar los valores devueltos.
El invocador puede especificar que no se solicita ningún nombre de host (o nombre de servicio) pasando como argumento host (o serv) el valor NULL o asignando cero al parámetro hostlen (o servlen). Sin embargo, al menos uno de los dos, nombre de host o nombre de servicio, debe ser solicitado.
El argumento flags modifica el comportamiento de getnameinfo(3) como sigue:
Cuando tiene éxito se devuelve 0 y los nombres de nodo y de servicio, si se solicitan, se rellenan con cadenas terminadas en NUL, posiblemente truncadas para ajustarse al tamaño especificado de los buffers. En caso de error se devuelve un valor distinto de cero y se modifica errno apropiadamente.
/etc/hosts
/etc/nsswitch.conf
/etc/resolv.conf
Con el objetivo de ayudar al programador a elegir tamaños razonables para los buffers suministrados, <netdb.h> define las constantes
# define NI_MAXHOST 1025
# define NI_MAXSERV 32
El código siguiente trata de obtener el nombre de host y el nombre de servicio en formato numérico, para una dirección de conector dada. Observe que no hay una referencia explícita a una familia de direcciones particular.
struct sockaddr *sa; /* entrada */
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
La siguiente versión comprueba si la dirección de conector tiene una correspondencia inversa.
if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf),
NULL, 0, NI_NAMEREQD))
printf("could not resolve hostname");
else
printf("host=%s\n", hbuf);
RFC 2553. (Véase también XNS, apartado 5.2.)
getaddrinfo(3), gethostbyaddr(3), getservbyname(3), getservbyport(3), inet_ntop(3), socket(3), hosts(5), services(5), hostname(7), named(8)
R. Gilligan, S. Thomson, J. Bound y W. Stevens, Basic Socket Interface Extensions for IPv6, RFC 2553, Marzo de 1999.
Tatsuya Jinmei y Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses, internet draft, work in progress. ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt
Craig Metz, Protocol Independence Using the Sockets API, Proceedings of the freenix track: 2000 USENIX annual technical conference, June 2000. http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html
11 diciembre 2000 | Página de Manual de Linux |