There are times when a socket address represents the address of a user that has connected to your server, or represents the sender of a UDP packet. The job of converting a network sequenced 32-bit
value into dottedquad notation is inconvenient. Hence, the inet_ntoa(3) function has been provided. The synopsis of the function is as follows:
char *inet_ntoa(struct in_addr addr);
The function requires only one input argument addr. Note that the struct in_addr is an internal part of the Internet socket address. The address is converted into a static buffer, which is internal to the function. This character array pointer is returned as the return value. The results will be valid only until the next call to this function.
Review the sockaddr_in structure in previous blog (), "Domains and Address Families," . This will help you visualize the physical address structure that you are working with. If a socket address addr exists in your program as a sockaddr_in structure, then the following code shows how to use inet_ntoa(3) to perform the conversion. The IP number is converted to a string and reported, using the printf(3) function:
struct sockaddr_in addr; /* Socket Address */
printf("IP ADDR: %s\n", inet_ntoa(addr.sin_addr));
A complete example program is provided below. To compile and run this program, the following steps are required:
gcc -c -D_GNU_SOURCE -Wall inetntoa.c
gcc inetntoa.o -o inetntoa
The program below uses the same steps to set up the address as did the previous example program. The function inet_ntoa(3) is called upon to allow the IP number to be displayed.