|
|
To manipulate variable-length byte strings and byte swapping of
network addresses and values, see the following run-time library routines:
C Run-Time Routines
Call | Purpose | |
---|---|---|
memcmp(s1,s2,n) | compare byte strings | |
memcpy(s2,s1,n) | copy n bytes from s1 to s2 | |
memset(base,'\0',n) | zero-fill n bytes starting at base | |
htonl(val) | convert 32-bit quantity from host to network byte order | |
htons(val) | convert 16-bit quantity from host to network byte order | |
ntohl(val) | convert 32-bit quantity from network to host byte order | |
ntohs(val) | convert 16-bit quantity from network to host byte order |
The byte-swapping routines are provided because the operating system expects addresses to be supplied in network order. Because the hardware architecture of some machines is different from network order, programs are sometimes required to byte swap quantities. The library routines which return network addresses provide them in network order so that they may simply be copied into the structures provided to the system. This implies that users should encounter the byte-swapping problem only when interpreting network addresses. For example, to print out an Internet port:
printf("port number %d\n", ntohs(sp->s_port));For some architectures these routines are defined as null macros. Nevertheless, using them makes programs more portable.