1

我现在了解套接字,我看到有两个 struct Sockaddr 和 sockaddrin。

该指南说要在结构中包含 8 个字符的 char 以将一个结构与另一个结构进行比较我不明白它的工作如何你能解释我吗?

它就像将int转换为char [2]?

它如何与结构一起工作?

谢谢你。

4

1 回答 1

2

SOCKADDR 是一个通用结构,它包含一个 ADDRESS_FAMILY 字段,然后在该字段之后包含 14 个字节(类型为 char)。根据 sin_family 字段(ADDRESS_FAMILY)的值,后面的 14 个字节会有不同的解释。

当 sin_family 值等于 AF_INET 时,那么 SOCKADDR 结构实际上是一个 SOCKADDR_IN 结构,这只是意味着这 14 个字节真的应该解释为:

sin_port 2 个字节 sin_addr 4 个字节 8 个未使用但必须存在的填充字节以使其与 SOCKADDR 结构的大小相同。

因此,如果您有一个指向 SOCKADDR 的指针,并且您检查了 sin_family 字段并且它等于 AF_INET,那么您可以将指针转换为指向 SOCKADDR_IN 的指针并以这种方式访问​​这些字段。

于 2012-11-24T05:00:30.217 回答