如果侦听套接字接受了一个打开的套接字,我想获取远程端的主机名。 对于具有多个主机名的主机使用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也可能有。
答案 0 :(得分:0)
使用gethostbyaddr()
,它会为您提供您的互联网地址的所有DNS条目(仅限IPv4)。第一个应该是规范的。如果你需要IPv6,那么(如果想的话)你应该使用getaddrinfo()
并在提示中设置AI_CANONNAME(参见手册)。