| Resolución de nombres de dominio (DNS) Uno de los pilares de internet, es, sin lugar a dudas, el servicio de resolución de nombres. Este servicio consiste en darle al ordenador un nombre de dominio (EJ: www.google.com), y este te devuelve una dirección ip (Ej: 192.168.1.1). Para poder utilizar este servicio en C, necesitamos utilizar la función gethostbyname (Que microsoft pretende sustituir por getaddrinfo, pero para hacer una aplicación "compatible", usaremos a lo largo de todo el artículo la función gethostbyname), y la estructura hostent . Tanto la función como la estructura estan definidas en la cabecera <netdb.h>. Su estructura es la siguiente:
La gethostbyname() devuelve un puntero a la estructura struct hostent que se ha llenado, o NULL en caso de error (Sin embargo no se establece errno, sino h_errno). Describo a continuación los campos de la estructura hostent:
NOTA: Para ejecutar cualquier operación empleando sockets en una plataforma Microsoft Windows, se requiere el empleo de la cabecera <winsock.h>, inicializar una variable de estructura tipo WSADATA, e incluir en las dependencias del proyecto la librería wsock32.lib. No será necesario incluir ninguna de las cabeceras que se especifica en este artículo. Pongo un ejemplo multiplataforma de como se emplearía esta función:
NOTA: Para compilar esta aplicación en linux, si el gcc no tiene predefinido la directiva linux, habría que añadir a continuación de la línea el parámetro -DLINUX. Si se emplea cerr (Un stream de c++), ep fichero debería tener una extensión cpp, y añadir a la línea de compilación el parámetro lstdc++ NOTA: La función previamente expuesta, solo resolvería direcciones de tipo A, si queremos hacer una aplicación que acceda ademas a registros MX, o de algun otro tipo, deberíamos emplear la función res_search. |