2013-06-26 3 views
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 может иметь либо.

+2

Пожалуйста, разместите код с тем, что вы пробовали софар. – hetepeperfan

+0

Отредактировано как использовать getnameinfo. – Johnny

ответ

0

Используйте gethostbyaddr(), он предоставит вам все записи DNS для вашего интернет-адреса (только IPv4). Первый должен быть каноническим. Если вам нужен IPv6, то (если это так), вы должны использовать getaddrinfo() и установить AI_CANONNAME в подсказках (см. Руководство).