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()と、インターネット アドレスのすべての DNS エントリが表示されます (IPv4 のみ)。最初のものは正規のものでなければなりません。IPv6 が必要な場合getaddrinfo()は、ヒントで AI_CANONNAME を使用して設定する必要があります (マニュアルを参照)。

于 2013-06-26T13:57:49.573 に答える