在我的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
over 的优点是gethostbyaddr
什么?后者已弃用,仅应使用前者吗?为什么呢