The functions bind
and getsockname
use the generic data type struct sockaddr *
to represent a pointer to a socket address. You can't use this data type effectively to interpret an address or construct one; for that, you must use the proper data type for the socket's namespace.
Thus, the usual practice is to construct an address in the proper namespace-specific type, then cast a pointer to struct sockaddr *
when you call bind
or getsockname
.
The one piece of information that you can get from the struct sockaddr
data type is the address format designator which tells you which data type to use to understand the address fully.
The symbols in this section are defined in the header file `sys/socket.h'.
struct sockaddr
type itself has the following members:
short int sa_family
char sa_data[14]
sa_data
is essentially arbitrary. Each address format has a symbolic name which starts with `AF_'. Each of them corresponds to a `PF_' symbol which designates the corresponding namespace. Here is a list of address format names:
AF_FILE
PF_FILE
is the name of that namespace.) See File Namespace Details, for information about this address format.
AF_UNIX
AF_FILE
, for compatibility. (PF_UNIX
is likewise a synonym for PF_FILE
.)
AF_INET
PF_INET
is the name of that namespace.) See Internet Address Format.
AF_UNSPEC
The corresponding namespace designator symbol PF_UNSPEC
exists for completeness, but there is no reason to use it in a program.
`sys/socket.h' defines symbols starting with `AF_' for many different kinds of networks, all or most of which are not actually implemented. We will document those that really work, as we receive information about how to use them.