#### 16.6.1 Internet Socket Address Formats

In the Internet namespace, for both IPv4 (`AF_INET`) and IPv6 (`AF_INET6`), a socket address consists of a host address and a port on that host. In addition, the protocol you choose serves effectively as a part of the address because local port numbers are meaningful only within a particular protocol.

The data types for representing socket addresses in the Internet namespace are defined in the header file `netinet/in.h`.

— Data Type: struct sockaddr_in

> This is the data type used to represent socket addresses in the Internet namespace. It has the following members:

> `sa_family_t sin_family`
>   This identifies the address family or format of the socket address. You should store the value `AF_INET` in this member. See Socket Addresses.
> `struct in_addr sin_addr`
>   This is the Internet address of the host machine. See Host Addresses, and Host Names, for how to get a value to store here.
> `unsigned short int sin_port`
>   This is the port number. See Ports.

When you call `bind` or `getsockname`, you should specify `sizeof (struct sockaddr_in)` as the length parameter if you are using an IPv4 Internet namespace socket address.

— Data Type: struct sockaddr_in6

> This is the data type used to represent socket addresses in the IPv6 namespace. It has the following members:

> `sa_family_t sin6_family`
>   This identifies the address family or format of the socket address. You should store the value of `AF_INET6` in this member. See Socket Addresses.
> `struct in6_addr sin6_addr`
>   This is the IPv6 address of the host machine. See Host Addresses, and Host Names, for how to get a value to store here.
> `uint32_t sin6_flowinfo`
>   This is a currently unimplemented field.
> `uint16_t sin6_port`
>   This is the port number. See Ports.