17.1 Introduction
The ioctl function has traditionally
been the system interface used for everything that didn't fit into
some other nicely defined category. POSIX is getting rid of
ioctl for certain functionality by creating specific
wrapper functions to replace ioctls whose functionality is
being standardized by POSIX. For example, the Unix terminal
interface was traditionally accessed using ioctl, but
POSIX created 12 new functions for terminals: tcgetattr to
get the terminal attributes, tcflush to flush pending
input or output, and so on. In a similar vein, POSIX has replaced
one network ioctl: the new sockatmark function
(Section 24.3)
replaces the SIOCATMARK ioctl. Nevertheless, numerous
ioctls remain for implementation-dependent features
related to network programming: obtaining interface information and
accessing the routing table and ARP cache, for example.
This chapter provides an overview of the
ioctl requests related to network programming, but many of
these are implementation-dependent. Additionally, some
implementations, including 4.4BSD-derived systems and Solaris 2.6
and later, use sockets in the AF_ROUTE domain (routing
sockets) to accomplish many of these operations. We will cover
routing sockets in Chapter 18.
A common use of ioctl by network
programs (typically servers) is to obtain information on all the
host's interfaces when the program starts: the interface addresses,
whether the interface supports broadcasting, whether the interface
supports multicasting, and so on. We will develop our own function
to return this information and provide an implementation using
ioctl in this chapter, and examine another implementation
using routing sockets in Chapter 18.
|