Уильям Стивенс - UNIX: разработка сетевых приложений
- Название:UNIX: разработка сетевых приложений
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:5-94723-991-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Уильям Стивенс - UNIX: разработка сетевых приложений краткое содержание
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
UNIX: разработка сетевых приложений - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Мы можем разделить аргументы request, имеющие отношение к сети, на шесть категорий:
■ операции с сокетами;
■ операции с файлами;
■ операции с интерфейсами;
■ операции с кэшем ARP;
■ операции с таблицей маршрутизации;
■ операции с потоками (см. главу 31).
Помимо того, что, как показывает табл. 7.9, некоторые операции ioctlперекрывают часть операций fcntl(например, установка неблокируемого сокета), существуют также некоторые операции, которые с помощью функции ioctlможно задать более чем одним способом (например, смена групповой принадлежности сокета).
В табл. 17.1 перечислены аргументы request вместе с типами данных, на которые должен указывать адрес arg. В последующих разделах эти вызовы рассматриваются более подробно.
Таблица 17.1. Обзор сетевых вызовов ioctl
| Категория | request | Описание | Тип данных |
|---|---|---|---|
| Сокет | SIOCATMARK | Находится ли указатель чтения сокета на отметке внеполосных данных | int |
| SIOCSPGRP | Установка идентификатора процесса или идентификатора группы процессов для сокета | int | |
| SIOCGPGRP | Получение идентификатора процесса или идентификатора группы процессов для сокета | int | |
| Файл | FIONBIO | Установка/сброс флага отсутствия блокировки | int |
| FIOASYNC | Установка/сброс флага асинхронного ввода-вывода | int | |
| FIONREAD | Получение количества байтов в приемном буфере | int | |
| FIOSETOWN | Установка идентификатора процесса или идентификатора группы процессов для файла | int | |
| FIOGETOWN | Получение идентификатора процесса или идентификатора группы процессов для файла | int | |
| Интерфейс | SIOCGIFCONF | Получение списка всех интерфейсов | struct ifconf |
| SIOCSIFADDR | Установка адреса интерфейса | struct ifreq | |
| SIOCGIFADDR | Получение адреса интерфейса | struct ifreq | |
| SIOCSIFFLAGS | Установка флагов интерфейса | struct ifreq | |
| SIOCGIFFLAGS | Получение флагов интерфейса | struct ifreq | |
| SIOCSIFDSTADDR | Установка адреса типа «точка-точка» | struct ifreq | |
| SIOCGIFDSTADDR | Получение адреса типа «точка-точка» | struct ifreq | |
| SIOCGIFBRDADDR | Получение широковещательного адреса | struct ifreq | |
| SIOCSIFBRDADDR | Установка широковещательного адреса | struct ifreq | |
| SIOCGIFNETMASK | Получение маски подсети | struct ifreq | |
| SIOCSIFNETMASK | Установка маски подсети | struct ifreq | |
| SIOCGIFMETRIC | Получение метрики интерфейса | struct ifreq | |
| SIOCSIFMETRIC | Установка метрики интерфейса | struct ifreq | |
| SIOC xxx | (Множество вариантов в зависимости от реализации) | ||
| ARP | SIOCSARP | Создание/модификация элемента ARP | struct arpreq |
| SIOCGARP | Получение элемента ARP | struct arpreq | |
| SIOCDARP | Удаление элемента ARP | struct arpreq | |
| Маршрутизация | SIOCADDRT | Добавление маршрута | struct rtentry |
| SIOCDELRT | Удаление маршрута | struct rtentry | |
| Потоки | I_ xxx | (См. раздел 31.5) |
17.3. Операции с сокетами
Существует три типа вызова, или запроса (в зависимости от значения аргумента request) функции ioctl, предназначенные специально для сокетов [128, с. 551–553]. Все они требуют, чтобы третий аргумент функции ioctlбыл указателем на целое число.
■ SIOCATMARK. Возвращает указатель на ненулевое значение в качестве третьего аргумента (его тип, как только что было сказано, — указатель на целое число), если указатель чтения сокета в настоящий момент находится на отметке внеполосных данных (out-of-band mark), или указатель на нулевое значение, если указатель чтения сокета не находится на этой отметке. Более подробно внеполосные данные (out-of-band data) рассматриваются в главе 24. POSIX заменяет этот вызов функцией sockatmark, и мы рассматриваем реализацию этой новой функции с использованием функции ioctlв разделе 24.3.
■ SIOCGRP. Возвращает в качестве третьего аргумента указатель на целое число — идентификатор процесса или группы процессов, которым будут посылаться сигналы SIGIOили SIGURGпо окончании выполнения асинхронной операции или при появлении срочных данных. Этот вызов идентичен вызову F_GETOWNфункции fcntl, и в табл. 7.9 мы отмечали, что POSIX стандартизирует функцию fcntl.
■ SIOCSPGRP. Задает идентификатор процесса или группы процессов для отсылки им сигналов SIGIOили SIGURGкак целое число, на которое указывает третий аргумент. Этот вызов идентичен вызову F_SETOWNфункции fcntl, и в табл. 7.9 мы отмечали, что POSIX стандартизирует функцию fcntl.
17.4. Операции с файлами
Следующая группа вызовов начинается с FIOи может применяться к определенным типам файлов в дополнение к сокетам. Мы рассматриваем только вызовы, применимые к сокетам [128, с. 553].
Следующие пять вызовов требуют, чтобы третий аргумент функции ioctlуказывал на целое число.
■ FIONBIO. Флаг отключения блокировки при выполнении операций ввода-вывода сбрасывается или устанавливается в зависимости от третьего аргумента функции ioctl. Если этот аргумент является пустым указателем, то флаг сбрасывается (блокировка разрешена). Если же третий аргумент является указателем на единицу, то включается неблокируемый ввод-вывод. Этот вызов обладает тем же действием, что и команда F_SETFLфункции fcntl, которая позволяет установить или сбросить флаг O_NONBLOCK, задающий статус файла.
■ FIOASYNC. Флаг, управляющий получением сигналов асинхронного ввода-вывода ( SIGIO), устанавливается или сбрасывается для сокета в зависимости от того, является ли третий аргумент функции ioctlпустым указателем. Этот флаг имеет то же действие, что и флаг статуса файла O_ASYNC, который можно установить и сбросить с помощью команды F_SETFLфункции ioctl.
■ FIONREAD. Возвращает число байтов, в настоящий момент находящихся в приемном буфере сокета, как целое число, на которое указывает третий аргумент функции ioctl. Это свойство работает также для файлов, каналов и терминалов. Более подробно об этом вызове мы рассказывали в разделе 14.7.
■ FIOSETOWN. Эквивалент SIOCSPGRPдля сокета.
■ FIOGETOWN. Эквивалент SIOCGPGRPдля сокета.
17.5. Конфигурация интерфейса
Один из шагов, выполняемых многими программами, работающими с сетевыми интерфейсами системы, — это получение от ядра списка всех интерфейсов, сконфигурированных в системе. Это делается с помощью вызова SIOCGIFCONF, использующего структуру ifconf, которая, в свою очередь, использует структуру ifreq. Обе эти структуры показаны в листинге 17.1 [1] Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com.
.
Интервал:
Закладка: