在我的C程序中,我使用getaddrinfo
函数从主机名获取IP地址,使用getnameinfo
函数从IP地址获取主机名。这两个函数是互补的。我在man getaddrinfo
中读到必须使用freeaddrinfo()
函数释放为动态分配的链表res
分配的内存。因此,我的代码如下:
if ((err = getaddrinfo(argv[1], NULL, &hints, &res)) != 0) {
printf("error %d\n", err);
return 1;
}
addr.s_addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr.s_addr;
printf("%s\n", inet_ntoa(addr));
freeaddrinfo(res);
但是对于
getnameinfo
,我没有看到任何类似的函数,即freenameinfo
。当使用
getaddrinfo
时,为什么需要释放内存,但是使用getnameinfo
时不需要?为什么需要释放内存?在之前使用gethostbyaddr
时,没有必要释放内存。这是为什么不同呢?
getaddrinfo
相对于gethostbyaddr
的优势是什么?后者是否已被弃用,只能使用前者?为什么?