NI_DGRAM | Отыскивается имя службы UDP для указанного порта (вместо имени службы TCP). exec , и для UDP-службы biff ). |
NI_NAMEREQD | Если преобразование IP-адреса в имя хоста завершается неудачей и установлен данный флаг, то функция getnameinfo() возвращает ошибку. В противном случае она возвращает IP-адрес в формате с разделительными точками или двоеточиями. |
NI_NOFQDN | Имена хостов обычно возвращаются как полностью уточненные имена доменов. Это означает, что возвращается полное имя хоста, а не локальное сокращение. Если, к примеру, установлен данный флаг, вашим хостом является digit.iana.org , и вы ищете IP-адрес, соответствующий www.iana.org , тогда будет возвращено имя хоста www . Поиск имен хостов для остальных машин при этом не затрагивается (в предыдущем примере поиск адреса для www.ietf.org предоставит полное имя хоста www.ietf.org . |
NI_NUMERICHOST | Вместо выполнения поиска имен хостов функция getnameinfo() преобразует IP-адрес в IP-адрес по аналогии с inet_ntop() . |
NI_NUMERICSERV | Номер порта размещается в servicename в виде форматированной числовой строки (а не преобразуется в имя службы). |
Возвращаемые коды для getnameinfo()
— те же самые, что и для gethostinfо()
; в случае успеха возвращается нуль, в случае неудачи — код ошибки. Полный перечень возможных ошибок приведен в табл. 17.3. Для преобразования этих ошибок в описательные строки служит функция gai_strerror()
.
Ниже приведен пример, показывающий использование getnameinfo()
для выполнения обратного поиска имени для адресов IPv4 и IPv6.
$ ./reverselookup --host ::1
hostname: localhost
$ ./reverselookup --host 127.0.0.1
hostname: localhost
$ ./reverselookup --host 3ffe:b00:c18:1::10
hostname: www.6bone.net
$ ./reverselookup --host 206.123.31.124 --service 80
hostname: www.6bone.net service name: http
1: /* reverselookup.с */
2:
3: #include
4: #include
5: #include
6: #include
7: #include
8: #include
9:
10: /* Вызывается, если во время обработки командной строки происходит ошибка;
11: отображает короткое сообщение для пользователя и завершается. */
12: void usage(void) {
13: fprintf(stderr, "использование: reverselookup [--numerichost] "
14: "[--numericserv] [--namereqd] [--udp]\n");
15: fprintf(stderr, " [--nofqdn] "
16: "[--service<служба>] [--host<имя_хоста>]\n");
17: exit(1);
18: }
19:
20: int main(int argc, const char ** argv) {
21: int flags;
22: const char * hostAddress = NULL;
23: const char * serviceAddress = NULL;