Книга: UNIX: разработка сетевых приложений
17.1. Введение
17.1. Введение
Функция ioctl
традиционно являлась системным интерфейсом, используемым для всего, что не входило в какую-либо другую четко определенную категорию. POSIX постепенно избавляется от функции ioctl
, создавая заменяющие ее функции-обертки и стандартизуя их функциональность. Например, доступ к интерфейсу терминала Unix традиционно осуществлялся с помощью функции ioctl
, но в POSIX были созданы 12 новых функций для терминалов: tcgetattr
для получения атрибутов терминала, tcflush
для опустошения буферов ввода или вывода, и т.д. Аналогичным образом POSIX заменяет одну сетевую функцию ioctl
: новая функция sockatmark
(см. раздел 24.3) заменяет команду SIOCATMARK ioctl
. Тем не менее прочие сетевые команды ioctl
остаются не стандартизованными и могут использоваться, например, для получения информации об интерфейсе и обращения к таблице маршрутизации и кэшу ARP (Address Resolution Protocol — протокол разрешения адресов).
В этой главе представлен обзор команд функции ioctl
, имеющих отношение к сетевому программированию, многие из которых зависят от реализации. Кроме того, некоторые реализации, включая системы, происходящие от 4.4BSD и Solaris 2.6, используют сокеты домена AF_ROUTE
(маршрутизирующие сокеты) для выполнения многих из этих операций. Маршрутизирующие сокеты мы рассматриваем в главе 18.
Обычно сетевые программы (как правило, серверы) используют функцию ioctl
для получения информации обо всех интерфейсах узла при запуске программы, с тем чтобы узнать адрес интерфейса, выяснить, поддерживает ли интерфейс широковещательную передачу, многоадресную передачу и т.д. Для возвращения этой информации мы разработали нашу собственную функцию. В этой главе мы представляем ее реализацию с применением функции ioctl
, а в главе 18 — другую реализацию, использующую маршрутизирующие сокеты.