【发布时间】:2014-07-06 03:28:39
【问题描述】:
在我的 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 有什么优势?后者是否已弃用,只应使用前者?为什么?
【问题讨论】: