如何获得套接字的稳定主机名?

时间:2013-06-26 11:25:50

标签: c sockets networking

如果侦听套接字接受了一个打开的套接字,我想获取远程端的主机名。 对于具有多个主机名的主机使用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也可能有。

1 个答案:

答案 0 :(得分:0)

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