socket地址
每个协议族都定义了自己的socket结构, 而大多数的socket api都需要一个指向struct sockaddr的指针作为参数, 引入这个结构是为了能支持各种协议族的地址结构。在使用时首先定义特定协议族的地址结构,作为参数传入时强制转换为struct sockaddr类型。
通用socket结构
struct sockaddr {
sa_family_t sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
IPv4 socket 地址结构
struct in_addr {
__be32 s_addr;/* 32 bits IP address */
};
#define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
struct sockaddr_in {
__kernel_sa_family_t sin_family; /* Address family */
__be16 sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int)