Set of interface address structure
IPv4 socket address structure
The IPv4 socket address structure is often also referred to as "Internet interface address structure", which is named "SockAddr_in", defined in the header file
Struct in_addr {
IN_ADDR_T S_ADDR; / * 32BIT IPv4 Address * /
}; / * NetWork byte order * /
Struct sockaddr_in {
UINT8_T SIN_LEN; / * Length of structure (16) * /
SA_FAMILY_T SIN_FAMILY; / * AF_INET * /
IN_Port_t sin_port; / * 16-bit tcp or udp port number * /
/ * NetWork Byte Ordered * /
Struct in_addr sin_addr; / * 32bit ipv4 address * /
/ * NetWork Byte Ordered * /
Char sin_zero [8]; / * unused * /
}
General socket interface address structure
Definition in
Struct sockaddr {
UINT8_T SA_LEN;
SA_FAMILY_T SA_FAMILY; / * Address Family; AF_XXX VALUE * /
Char SA_Data [14]; / * ptotocol-specific address * /
}
The socket function is defined as a pointer to the universal socket address structure, such as a Bind function prototype:
INT Bind (int, struct sockaddr *, socklen_t);
This requires any call to these functions to convert a pointer type to a protocol-specific set address structure into a pointer to a general purpose socket address structure. E.g:
Struct SockAddr Serv;
/ * Fill In Serv {} * /
Bind (Sockfd, (Struct SockAddr *) & Serv, SIZEOF (Serv));
IPv6 socket address structure
IPv6 socket address structure is defined in header file
Struct in6_addr {
UINT8_T S6_ADDR [16]; / * 128 bit ipv6 address * /
/ * NetWork Byte Ordered * /
}
#define SIN6_LEN / * Required for Compile-Time Test * /
Struct sockaddr_in6 {
UINT8_T SIN6_LEN; / * Length of this struct (24) * /
SA_FAMILY_T SIN6_FAMILY; / * AF_INET6 * /
IN_Port_t sin6_port; / * Transport Layer Port # * /
/ * NetWork Byte Ordered * /
UINT32_T SIN6_FlowInfo; / * Priorty & Flow Label * /
/ * NetWork Byte Ordered * /
Struct in6_addr sin6_addr; / * ipv6 address * // * network byte order * /
}