Чтение онлайн

на главную - закладки

Жанры

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

Троан Эрик В.

Шрифт:

 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) {

116: rc = getnameinfo(addr, addrLen, NULL, 0,

117: serviceName, sizeof(serviceName), flags);

118: } else {

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

120: serviceName, sizeof(serviceName), flags);

121: }

122:

123: if (rc) {

124: fprintf(stderr, "сбой обратного поиска: %s\n",

125: gai_strerror(rc));

126: return 1;

127: }

128:

129: if (hostAddress)

130: printf("имя хоста: %s\n", hostName);

131: if (serviceAddress)

132: printf("имя службы: %s\n", serviceName);

133:

134: return 0;

135: }

17.5.7. Ожидание TCP-соединений

Ожидание соединений TCP происходит почти идентично ожиданию соединений домена Unix. Единственные различия заключаются в семействах протоколов и адресов. Ниже показан вариант примера сервера домена Unix, который работает через сокеты TCP.

 1: /* tserver.с */

 2:

 3: /*
Ожидает соединение на порте 4321. Как только соединение установлено,

 4: из сокета в stdout копируются данные до тех пор, пока вторая

 5: сторона не закроет соединение. Затем ожидает следующее соединение

 6: с сокетом. */

 7:

 8: #include <arpa/inet.h>

 9: #include <netdb.h>

10: #include <netinet/in.h>

11: #include <stdio.h>

12: #include <string.h>

13: #include <sys/socket.h>

14: #include <unistd.h>

15:

16: #include "sockutil.h" /* некоторые служебные функции */

17:

18: int main(void) {

19: int sock, conn, i, rc;

20: struct sockaddr address;

21: size_t addrLength = sizeof(address);

22: struct addrinfo hints, * addr;

23:

24: memset(&hints, 0, sizeof(hints));

25:

26: hints.ai_socktype = SOCK_STREAM;

27: hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;

28: if ((rc = getaddrinfo(NULL, "4321", &hints, &addr))) {

29: fprintf(stderr, "сбой поиска имени хоста: %s\n",

30: gai_strerror(rc));

31: return 1;

32: }

33:

34: if ((sock = socket(addr->ai_family, addr->ai_socktype,

35: addr->ai_protocol)) < 0)

36: die("socket");

37:

38: /* Позволяет ядру повторно использовать адрес сокета. Это разрешает

39: нам запускать программу два раза подряд, не ожидая пока истечет

40: время для кортежа (ip-адрес, порт). */

41: i = 1;

42: setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));

43:

44: if (bind(sock, addr->ai_addr, addr->ai_addrlen))

45: die("bind");

46:

47: freeaddrinfo(addr);

48:

49: if (listen(sock, 5))

50: die("listen");

Поделиться:
Популярные книги

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник