0

通过侦听套接字接受的打开套接字,我想获取远程端的主机名。将 getnameinfo() 用于具有多个主机名的主机我并不总是得到相同的主机名。是否有可能获得所有这些或至少每次都获得相同的?

我在一些文档中读到了一些关于规范主机名的内容,但除了暗示这是我需要的之外,找不到更多信息。

这是我如何调用 getnameinfo()

char szHostname[ NI_MAXHOST ];
const sockaddr* pSock;
int nSockLen;

// stuff to get a pSock

int ret = getnameinfo( pSock, nSockLen, szHostname, NI_MAXHOST, 0, 0, NI_NAMEREQD );
if ( ret != 0 )
    ret = getnameinfo( pSock, nSockLen, szHostname, NI_MAXHOST, 0, 0, NI_NUMERICHOST );

printf( szHostname );

如果对等点 X 有多个主机名 AAA 和 BBB szHostname 可能有。

4

1 回答 1

0

使用gethostbyaddr(),它将为您提供 Internet 地址的所有 DNS 条目(仅限 IPv4)。第一个应该是规范的。如果您需要 IPv6,那么(如果认为)您应该getaddrinfo()在提示中使用并设置 AI_CANONNAME(参见手册)。

于 2013-06-26T13:57:49.573 回答