которому относится данный адрес. Перечень стандартных адресных семейств, используемых приложениями Linux, приведен в табл. 17.1.

Таблица 17.1. Семейства протоколов и адресов

Адрес Протокол Описание протокола
AF_UNIX PF_UNIX Домен Unix.
AF_INET PF_INET TCP/IP (версия 4).
AF_INET6 PF_INET6 TCP/IP (версия 6).
AF_AX25 PF_AX25 AX.25, используется радиолюбителями.
AF_IPX PF_IPX Novell IPX.
AF_APPLETALK PF_APPLETALK AppleTalk DDS.
AF_NETROM PF_NETROM NetROM, используется радиолюбителями.

17.2. Служебные функции

Во всех примерах этого раздела используются две функции: copyData() и die (). Функция copyData() считывает данные из одного файлового дескриптора и записывает их в какой-то другой дескриптор (до тех пор, пока имеются данные для чтения). Функция die() вызывает perror() и завершает программу. Мы ввели обе указанные функции в файл sockutil.с для того, чтобы сделать обучающие программы немного проще. Для справки ниже показана реализация двух данных функций.

 1: /* sockutil.с */

 2:

 3: #include <stdio.h>

 4: #include <stdlib.h>

 5: #include <unistd.h>

 6:

 7: #include 'sockutil.h'

 8:

 9: /* выдает сообщение об ошибке через функцию perror() и прекращает работу программы */

10: void die(char * message) {

11:  perror(message);

12:  exit(1);

13: }

14:

15: /* Копирует данные из дескриптора файла 'from' в дескриптор файла

16:  'to' до полного завершения копирования. Выходит из программы, если

17:  происходит ошибка. Предполагается, что для обоих файлов установлено

18:  блокирующее чтение и запись. */

19: void copyData(int from, int to) {

20:  char buf[1024];

21:  int amount;

22:

23;  while ((amount = read(from, buf, sizeof(buf))) > 0) {

24:   if (write(to, buf, amount) != amount) {

25:    die('write');

26:    return;

27:   }

28:  }

29:  if (amount < 0)

30:   die('read');

31: }

17.3. Основные действия с сокетами

Подобно большинству остальных ресурсов Linux сокеты реализуются через файловую абстракцию. Они создаются при помощи системного вызова socket(), который возвращает файловый дескриптор. После соответствующей инициализации сокета данный дескриптор может использоваться для

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату