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

 24:  struct sockaddr_in addr4;

 25:  struct sockaddr_in6 addr6;

 26:  struct sockaddr *addr = (struct sockaddr *) &addr4

 27:  int addrLen = sizeof(addr4);

 28:  int rc;

 29:  int portNum = 0;

 30:  const char ** ptr;

 31:  char hostName[1024];

 32:  char serviceName[256];

 33:

 34:  /* очистить флаги */

 35:  flags = 0;

 36:

 37:  /* разобрать аргументы командной строки, игнорируя argv[0] */

 38:  ptr = argv + 1;

 39:  while (*ptr && *ptr[0] == '-') {

 40:   if (!strcmp(*ptr, "—numerichost")) {

 41:    flags |= NI_NUMERICHOST;

 42:   } else if (!strcmp (*ptr, "--numericserv")) {

 43:    flags |= NI_NUMERICSERV;

 44:   } else if (!strcmp (*ptr, "--namereqd")) {

 45:    flags |= NI_NAMEREQD;

 46:   } else if (!strcmp(*ptr, "--nofqdn")) {

 47:    flags |= NI_NOFQDN;

 48:   } else if (!strcmp (*ptr, "--udp")) {

 49:    flags |= NI_DGRAM;

 50:   } else if (!strcmp(*ptr, "--host")) {

 51:    ptr++;

 52:    if (!*ptr) usage();

 53:    hostAddress = *ptr;

 54:   } else if (!strcmp(*ptr, "--service")) {

 55:    ptr++;

 56:    if (!*ptr) usage();

 57:    serviceAddress = *ptr;

 58:   } else

 59:    usage();

 60:

 61:   ptr++;

 62:  }

 63:

 64:  /* необходимы адреса hostAddress, serviceAddress или оба */

 65:  if (!hostAddress && !serviceAddress)

 66:   usage();

 67:

 68:  if (serviceAddress) {

 69:   char * end;

 70:

 71:   portNum = htons(strtol(serviceAddress, &end, 0));

 72:   if (*end) {

 73:    fprintf(stderr, "сбой при преобразовании %s в число\n",

 74:     serviceAddress);

 75:    return 1;

 76:   }

 77:  }

 78:

 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:  }

111:

112:  if (!serviceAddress) {

113:   rc = getnameinfo(addr, addrLen, hostName, sizeof(hostName),

114:    NULL, 0, flags);

115:  } else if (!hostAddress) {

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

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

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

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

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

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

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

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

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