<< Prev | Beej's Guide to Network Programming | Next >> |
Look up the host name and service name information for a given
#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);
This function is the opposite of getaddrinfo(), that is,
this function takes an already loaded
You have to pass in a pointer to a
The resultant host name and service name will be written to the area pointed to by the host and serv parameters. Of course, you have to specify the max lengths of these buffers in hostlen and servlen.
Finally, there are several flags you can pass, but here a a couple good ones. NI_NOFQDN will cause the host to only contain the host name, not the whole domain name. NI_NAMEREQD will cause the function to fail if the name cannot be found with a DNS lookup (if you don't specify this flag and the name can't be found, getnameinfo() will put a string version of the IP address in host instead.)
As always, check your local man pages for the full scoop.
Returns zero on success, or non-zero on error. If the return value is non-zero, it can be passed to gai_strerror() to get a human-readable string. See getaddrinfo for more information.
struct sockaddr_in6 sa; // could be IPv4 if you want char host[1024]; char service[20]; // pretend sa is full of good information about the host and port... getnameinfo(&sa, sizeof sa, host, sizeof host, service, sizeof service, 0); printf(" host: %s\n", host); // e.g. "www.example.com" printf("service: %s\n", service); // e.g. "http"
getaddrinfo(), gethostbyaddr()
<< Prev | Beej's Guide to Network Programming | Next >> |