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

Следующий параметр type может иметь одно из значений: SOCK_STREAM, SOCK_DGRAM или SOCK_RAW.[119] Здесь SOCK_STREAM указывает потоковый протокол из данного семейства, a SOCK_DGRAM специфицирует дейтаграммный протокол из того же семейства. Параметр SOCK_RAW предоставляет возможность передавать пакеты прямо в драйвер сетевого устройства, что позволяет пользовательским приложениям поддерживать сетевые протоколы, которые не воспринимаются ядром.

Последний параметр устанавливает протокол для использования с учетом всех ограничений, введенных первыми двумя параметрами. Как правило, значение этого параметра равно 0, что позволяет ядру использовать стандартный протокол установленного типа из указанного семейства. В табл. 17.2 перечислены некоторые допустимые протоколы для семейства PF_INET. Стандартными протоколами здесь считаются IPPROTO_TCP (потоковый) и IPPROTO_UDP (дейтаграммный).

Таблица 17.2. Протоколы IP

ПротоколОписание
IPPROTO_ICMPInternet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv4.
IPPROTO_ICMPV6Internet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv6.
IPPROTO_IPIPТоннели IPIP
IPPROTO_IPV6Заголовки IPv6.
IPPROTO_RAWПакеты Raw IP.
IPPROTO_TCPTransmission Control Protocol (TCP) (протокол управления передачей).
IPPROTO_UDPUser Datagram Protocol (UDP) (протокол передачи дейтаграмм пользователя).
<p>17.3.2. Установка соединений</p>

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

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

<p>17.3.3. Связывание адреса с сокетом</p>

И серверный, и клиентский процессы должны сообщить системе, какой адрес использовать для сокета. Прикрепление адреса к локальной стороне сокета называется связыванием сокета и выполняется через системный вызов bind().

#include

int bind(int sock, struct sockaddr * my_addr, socklen_t addrlen);

Первый параметр — это связываемый сокет, остальные параметры задают адрес для локальной конечной точки.

<p>17.3.4. Ожидание соединений</p>

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

Как правило, функция accept() блокируется до тех пор, пока к ней не пытается присоединиться некоторый клиентский процесс. Если сокет был помечен как неблокируемый через fcntl(), то функция accept() возвращает значение EAGAIN в том случае, если нет ни одного доступного клиентского процесса[120]. Системные вызовы select(), poll() и epoll могут использоваться для указания, ждать ли соединению обработки (эти вызовы помечают сокет как готовый для считывания)[121].

Ниже показаны прототипы listen() и accept().

#include

int listen(int sock, int backlog);

int accept(int sock, struct sockaddr * addr, socklen_t * addrlen);

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

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

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

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

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

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

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

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

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