为什么我们需要一个单独的结构来保存 32 位 IPv4 地址
Why do we need a separate structure to hold the 32-bit IPv4 address
对于 IPv4 地址的套接字编程,我们需要使用以下结构来设置 client/server 的地址。
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
我的问题是为什么我们需要结构in_addr?我们不能把 in_addr_t 字段放在 sockaddr_in 中吗?
它是特定于平台的。在 Windows in_addr
上定义为以下结构,它允许您访问地址的个人 byte
s 和 short
s (documentation):
struct in_addr {
union {
struct {
u_char s_b1;
u_char s_b2;
u_char s_b3;
u_char s_b4;
} S_un_b;
struct {
u_short s_w1;
u_short s_w2;
} S_un_w;
u_long S_addr;
} S_un;
};
对于 IPv4 地址的套接字编程,我们需要使用以下结构来设置 client/server 的地址。
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
我的问题是为什么我们需要结构in_addr?我们不能把 in_addr_t 字段放在 sockaddr_in 中吗?
它是特定于平台的。在 Windows in_addr
上定义为以下结构,它允许您访问地址的个人 byte
s 和 short
s (documentation):
struct in_addr {
union {
struct {
u_char s_b1;
u_char s_b2;
u_char s_b3;
u_char s_b4;
} S_un_b;
struct {
u_short s_w1;
u_short s_w2;
} S_un_w;
u_long S_addr;
} S_un;
};