一、套接字地址结构:
struct in_addr
{
in_addr_t s_addr; //32位IP地址,网络字节排序。
};
struct sockaddr_in
{
unint8_t sin_len //结构长度 无符号的八位整数
sa_faminly_t sin_family;//协议族 AF_INET ,是一个无符号字段表示套接字结构中的地址族。
in_port_t sin_port //16位tcp端口号,一般为无符号位的16位整数。
struct in_addr sin_addr;//32位ip地址 一般为无符号32位整数
char sin_zero[8]
}
一般长度字段可由可无。
POSIX规范只需要这个结构中的三个字段:sin_family、sin_addr 和sin_port。
TCP端口号和IPv4地址在套接字结构中,总以网络字节来存储。
二、通用套接字地址结构
当作为一个参数任何套接字函数时,套接字地址结构总以引用形式来传递。然而处理套接字的函数必须处理来自所支持的任何协议族的套接字结构。
对于开发人员来说,通用套接字地址结构的唯一用途就是对指向特定于协议的套接字结构的指针执行类型强制转换。
例如:
int bind(int,struct sockaddr *,socklen_t);
struct sockaddr_in serv;
bind(sockfd,(struct sockaddr*)&serv,sizeof(serv));
三、套接字函数分类:
(1)从进程到内核传递套接字地址结构的函数有三个:bind、connect、sendto。
(2)从内核到进程传递套接字地址结构的函数有四个:accep、recvfrom、getseekname、getpeername。
四、字节排序函数:
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
htons 转换TCP端口号 为网络序的。
htonl 转换TCPIP地址 为网络序的。
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
ntohs 转换TCP端口号 为主机序的。
ntohl 转换TCPIP地址 为主机序的。