Таблица 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
.
Следующая группа вызовов начинается с FIO
и может применяться к определенным типам файлов в дополнение к сокетам. Мы рассматриваем только вызовы, применимые к сокетам [128, с. 553].
Следующие пять вызовов требуют, чтобы третий аргумент функции ioctl
указывал на целое число.
■ FIONBIO
. Флаг отключения блокировки при выполнении операций ввода-вывода сбрасывается или устанавливается в зависимости от третьего аргумента функции ioctl
. Если этот аргумент является пустым указателем, то флаг сбрасывается (блокировка разрешена). Если же третий аргумент является указателем на единицу, то включается неблокируемый ввод-вывод. Этот вызов обладает тем же действием, что и команда F_SETFL
функции fcntl
, которая позволяет установить или сбросить флаг O_NONBLOCK
, задающий статус файла.
Читать дальше
Конец ознакомительного отрывка
Купить книгу