先回顾一下, IPv4 socket 编程我们用到这两个数据结构:
struct sockaddr {
u_char sa_len; /* total length */
sa_family_t sa_family; /* address family */
char sa_data[14]; /* actually longer; address value */
};
struct sockaddr_in
{
UCHAR sin_len;
UCHAR sin_family;
VOS_UINT16 sin_port;
struct in_addr sin_addr;
CHAR sin_zero[8];
};
struct sockaddr 是一个通用的概念,表示任何socket address, connect,bind, recvfrom 等函数用的就是它; struct sockaddr_in 特别表示IPv4 internet address。 我们在做IPv4 编程的时候,其实脑子里已经确定了是在用IPv4的概念,初始化socket 的时候用的是IPv4, 然后把 sockaddr_in 转换为 sockaddr。 这是一个例子:
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc