1、套接口地址结构
POSIX规范只需要结构中的三个成员:sin_family、sin_addr、sin_port。其中sin_addr又是一个结构
2、通用套接口地址结构
套接口函数被定义为采用指向通用套接口地址结构的指针。由于套接口函数的定义并没有使用void*指针类型,
所以调用套接口函数时必须进行强制类型转换。
使用通用套接口地址结构的原因:内核必须依据通用套接口地址结,检查sin_family的值来确定结构的类型
3、字节排序函数
多字节数据在内存中存储有两种方法。小端字节序把低字节存储在起始地址;大端字节序高序字节存储在起始地址。
POSIX规范规定,套接口地址结构中一些成员按网络字节序进行维护,所以必须注意主机字节序和网络字节序之间
的转换。
#include <netinet/in.h>
返回网络字节序值
uint16_t htons (uint16_t)
uint32_t htonl (uint32_t)
返回主机字节序值
uint16_t ntohs (uint16_t)
uint32_t ntohl (uint32_t)
4、地址转换函数
地址转换函数用于ASCII字符串和网络字节序的二进制值间转换地址
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr)
把strptr所指的字符串转换为32位的网络字节序二进制值,把结果保存在addrptr中。成功返回1,失败返回0。
in_addr_t inet_addr (const char *strptr)
返回32位网络字节序二进制值。失败时返回一个常值INADDR_NONE(255.255.255.255),所以该函数不能处理
点分十进制数串255.255.255.255
char *inet_ntoa (struct in_addr inaddr)
将32位网络字节序二进制值转换成点分十进制数串。
下面两个转换函数对ipv4和ipv6地址都能处理。
#include <arpa/inet.h>
点分十进制到二进制转换
int inet_pton (int family, const char *strptr, void *addrptr)
二进制到点分十进制转换
const char *inet_ntop (int family, const void *addrptr, char *strptr, size_t len)