Разработка приложений в среде Linux. Второе издание
Шрифт:
В настоящем разделе представлены основные системные вызовы для создания и инициализации сокетов для любого протокола. Для того чтобы не зависеть от протоколов, информация в некоторой степени абстрагирована, по этой же причине мы не приводим примеры. Следующие два раздела посвящены применению сокетов в двух различных протоколах (домен Unix и TCP/IP). Здесь вы найдете подробные примеры использования большинства системных вызовов, описанных ниже.
17.3.1. Создание сокета
Новые сокеты создаются системным вызовом
Подобно
Первый параметр указывает семейство протоколов и, как правило, принимает одно из значений, перечисленных в табл. 17.1.
Следующий параметр
119
Допустимы еще несколько значений данного параметра, однако они редко применяются в коде приложений.
Последний параметр устанавливает протокол для использования с учетом всех ограничений, введенных первыми двумя параметрами. Как правило, значение этого параметра равно 0, что позволяет ядру использовать стандартный протокол установленного типа из указанного семейства. В табл. 17.2 перечислены некоторые допустимые протоколы для семейства
Таблица 17.2. Протоколы IP
Протокол | Описание |
---|---|
IPPROTO_ICMP | Internet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv4. |
IPPROTO_ICMPV6 | Internet Control Message Protocol (протокол управляющих сообщений в сети Internet) для IPv6. |
IPPROTO_IPIP | Тоннели IPIP |
IPPROTO_IPV6 | Заголовки IPv6. |
IPPROTO_RAW | Пакеты Raw IP. |
IPPROTO_TCP | Transmission Control Protocol (TCP) (протокол управления передачей). |
IPPROTO_UDP | User Datagram Protocol (UDP) (протокол передачи дейтаграмм пользователя). |
17.3.2. Установка соединений
После создания потокового сокета его необходимо присоединить к чему-то часто используемому. Установка соединений сокетов является в большой степени несимметричной задачей, поскольку каждая сторона проводит соединение по-разному. Одна сторона получает сокет, который готов к соединению, и затем ожидает кого-либо для того, чтобы присоединиться к нему. Эту функцию, как правило, выполняют серверные приложения, которые однажды активизируются и постоянно продолжают работать, ожидая подключения со стороны других процессов.
Клиентские процессы, в свою очередь, создают сокет, сообщают системе адрес, к которому они хотят подключиться, и после этого пытаются установить соединение. Как только сервер (ожидающий клиента) принимает
17.3.3. Связывание адреса с сокетом
И серверный, и клиентский процессы должны сообщить системе, какой адрес использовать для сокета. Прикрепление адреса к локальной стороне сокета называется связыванием сокета и выполняется через системный вызов
Первый параметр — это связываемый сокет, остальные параметры задают адрес для локальной конечной точки.
17.3.4. Ожидание соединений
После создания сокета сервер привязывает к нему адрес с помощью функции
Как правило, функция
120
Системный вызов
121
Различные формы
Ниже показаны прототипы
В обеих функциях предполагается, что первый параметр — это файловый дескриптор. Второй параметр
Неудержимый. Книга VIII
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Законы Рода. Том 6
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
рейтинг книги
Восход. Солнцев. Книга I
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Попаданка
Любовные романы:
любовно-фантастические романы
рейтинг книги
Возлюби болезнь свою
Научно-образовательная:
психология
рейтинг книги
