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

124:  if (serviceName)

125:   printf("\tport %d", ntohs(inetaddr->sin_port));

126:

127:  if (hostName)

128:   printf("\thost %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("\tport %d", ntohs(inetaddr->sin6_port));

138:

139:  if (hostName)

140:   printf("\thost %s",

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

142:     nameBuf, sizeof(nameBuf)));

143: }

Обратное преобразование строки, содержащей адрес с точками или двоеточиями, в двоичный IP-адрес выполняет функция inet_pton().

#include

int inet_pton(int family, const char * address, void * dest);

Параметр family определяет тип преобразуемого адреса (либо AF_INET, либо AF_INET6), a address указывает на строку, в которой содержится символьное представление адреса. Если используется AF_INET, то десятичная строка с точками преобразуется в двоичный адрес, хранящийся в переменной, на которую указывает параметр dest структуры struct in_addr. Для AF_INET6 строка с двоеточиями преобразуется и сохраняется в переменной, на которую указывает dest структуры struct in6_addr. В отличие от большинства библиотечных функций, inet_pton() возвращает 1, если преобразование прошло успешно, 0, если dest не содержит соответствующий адрес, и -1, если параметр family не совпадает с AF_INET или AF_INET6.

Программа-пример reverselookup, код которой представлен далее в главе, использует функцию inet_pton() для преобразования IPv4- и IPv6-адресов, передаваемых пользователем, в структуры struct sockaddr. Ниже приводится раздел кода, выполняющий преобразования IP-адреса, на который указывает hostAddress. В конце данного кода struct sockaddr * addr указывает на структуру, содержащую преобразованный адрес.

 79: if (!hostAddress) {

 80:  addr4.sin_family = AF_INET;

 81:  addr4.sin_port = portNum;

 82: } else if (! strchr(hostAddress, ':')) {

 83:  /* Если в hostAddress появляется двоеточие, то принимаем версию IPv6.

 84:     В противном случае это IPv4-адрес */

 85:

 86:  if (inet_pton(AF_INET, hostAddress,

 87:      &addr4.sin_addr) <= 0) {

 88:   fprintf(stderr, "ошибка преобразования IPv4-адреса %s\n",

 89:    hostAddress);

 90:   return 1;

 91:  }

 92:

 93:  addr4.sin_family = AF_INET;

 94:  addr4.sin_port = portNum;

 95: } else {

 96:

 97:  memset(&addr6, 0, sizeof(addr6));

 98:

 99:  if (inet_pton(AF_INET6, hostAddress,

100:      &addr6.sin6_addr) <= 0) {

101:   fprintf(stderr, "ошибка преобразования IPv6-адреса %s\n",

102:   hostAddress);

103:   return 1;

104:  }

105:

106:  addr6.sin6_family = AF_INET6;

107:  addr6.sin6_port = portNum;

108:  addr = (struct sockaddr *) &addr6

109:  addrLen = sizeof(addr6);

110: }

<p>17.5.5. Преобразование имен в адреса</p>
Перейти на страницу:

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

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

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

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

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

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

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

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