Different kinds of computers use different conventions for the ordering of bytes within a word. Some computers put the most significant byte within a word first (this is called “big-endian” order), and others put it last (“little-endian” order).
So that machines with different byte order conventions can communicate, the Internet protocols specify a canonical byte order convention for data transmitted over the network. This is known as network byte order.
When establishing an Internet socket connection, you must make sure that
the data in the sin_port
and sin_addr
members of the
sockaddr_in
structure are represented in network byte order.
If you are encoding integer data in the messages sent through the
socket, you should convert this to network byte order too. If you don’t
do this, your program may fail when running on or talking to other kinds
of machines.
If you use getservbyname
and gethostbyname
or
inet_addr
to get the port number and host address, the values are
already in network byte order, and you can copy them directly into
the sockaddr_in
structure.
Otherwise, you have to convert the values explicitly. Use htons
and ntohs
to convert values for the sin_port
member. Use
htonl
and ntohl
to convert IPv4 addresses for the
sin_addr
member. (Remember, struct in_addr
is equivalent
to uint32_t
.) These functions are declared in
netinet/in.h.
uint16_t
htons (uint16_t hostshort)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function converts the uint16_t
integer hostshort from
host byte order to network byte order.
uint16_t
ntohs (uint16_t netshort)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function converts the uint16_t
integer netshort from
network byte order to host byte order.
uint32_t
htonl (uint32_t hostlong)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function converts the uint32_t
integer hostlong from
host byte order to network byte order.
This is used for IPv4 Internet addresses.
uint32_t
ntohl (uint32_t netlong)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function converts the uint32_t
integer netlong from
network byte order to host byte order.
This is used for IPv4 Internet addresses.