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

АдресПротоколОписание протокола
AF_UNIXPF_UNIXДомен Unix.
AF_INETPF_INETTCP/IP (версия 4).
AF_INET6PF_INET6TCP/IP (версия 6).
AF_AX25PF_AX25AX.25, используется радиолюбителями.
AF_IPXPF_IPXNovell IPX.
AF_APPLETALKPF_APPLETALKAppleTalk DDS.
AF_NETROMPF_NETROMNetROM, используется радиолюбителями.
<p>17.2. Служебные функции</p>

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

 1: /* sockutil.с */

 2:

 3: #include

 4: #include

 5: #include

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

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

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

В настоящем разделе представлены основные системные вызовы для создания и инициализации сокетов для любого протокола. Для того чтобы не зависеть от протоколов, информация в некоторой степени абстрагирована, по этой же причине мы не приводим примеры. Следующие два раздела посвящены применению сокетов в двух различных протоколах (домен Unix и TCP/IP). Здесь вы найдете подробные примеры использования большинства системных вызовов, описанных ниже.

<p>17.3.1. Создание сокета</p>

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

#include

int socket(int domain, int type, int protocol);

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

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

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

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