Читаем Разработка приложений в среде Linux. Второе издание полностью

 79:  addr = result;

 80:  while (addr) {

 81:   switch (addr->ai_family) {

 82:   case PF_INETs: printf("IPv4");

 83:    break;

 84:   case PF_INET6: printf("IPv6");

 85:    break;

 86:   default: printf("(%d) addr->ai_family);

 87:    break;

 88:   }

 89:

 90:   switch (addr->ai_socktype) {

 91:   case SOCK_STREAM: printf("\tstream");

 92:    break;

 93:   case SOCK_DGRAM: printf("\tdgram");

 94:    break;

 95:   case SOCK_RAW: printf("\traw");

 96:    break;

 97:   default: printf("\t(%d)

 98:    addr->ai_socktype);

 99:    break;

100:   }

101:

102:   if (addr->ai_family == PF_INET ||

103:    addr->ai_family == PF_INET6)

104:    switch (addr->ai_protocol) {

105:    case IPPROTO_TCP: printf("\ttcp");

106:     break;

107:    case IPPROTO_UDP: printf("\tudp");

108:     break;

109:    case IPPROTO_RAW: printf("\traw");

110:     break;

111:    default: printf("\t(%d)

112:     addr->ai_protocol);

113:     break;

114:    }

115:   else

116:    printf("\t");

117:

118:   /* отобразить информацию и для IPv4-, и для IPv6-адресов */

119:

120:   if (addr->ai_family == PF_INET) {

121:    struct sockaddr_in * inetaddr = (void*)addr->ai_addr;

122:    char nameBuf[INET_ADDRSTRLEN];

123:

124:    if (serviceName)

125:     printf("\tпорт%d", ntohs(inetaddr->sin_port));

126:

127:    if (hostName)

128:     printf("\tхост%s",

129:      inet_ntop(AF_INET, &inetaddr->sin_addr,

130:       nameBuf, sizeof(nameBuf)));

131:   } else if (addr->ai_family == PF_INET6) {

132:    struct sockaddr_in6 * inetaddr =

133:     (void*)addr->ai_addr;

134:    char nameBuf[INET6_ADDRSTRLEN];

135:

136:    if (serviceName)

137:     printf("\tпорт%d", ntohs(inetaddr->sin6_port));

138:

139:    if (hostName)

140:     printf("\tхост%s",

141:      inet_ntop(AF_INET6, &inetaddr->sin6_addr,

142:       nameBuf, sizeof(nameBuf)));

143:   }

144:

145:   if (addr->ai_canonname)

146:    printf("\tname%s", addr->ai_canonname);

147:

148:   printf("\n");

149:

150:   addr = addr->ai_next;

151:  }

152:

153:  /* очистить результаты getaddrinfo() */

154:  freeaddrinfo(result);

155:

156:  return 0;

157: }

В отличие от большинства библиотечных функций, getaddrinfo() возвращает целое число, которое равно нулю в случае успеха, и описывает ошибку в случае неудачи. Такие функции, как правило, не используют errno. В табл. 17.3 описаны различные коды ошибок, которые могут возвращать подобные функции.

Таблица 17.3. Ошибки поиска соответствия адреса и имени

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT