linux以太网帧套接字澄清

时间:2014-07-22 13:59:29

标签: c linux

我试图了解google中找到的示例套接字代码中的以下行。

struct ether_header *eh = (struct ether_header *) sendbuf;
struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header));

struct ether_header *eh - >到目前为止,知道*eh用于访问结构变量

我只想了解这些作业

  1. (struct ether_header *) sendbuf;
  2. (struct iphdr *) (sendbuf + sizeof(struct ether_header));

2 个答案:

答案 0 :(得分:4)

在第一行

(struct ether_header *) sendbuf;

变量sendbuf被强制转换为指向struct ether_header的指针,您可以阅读有关投射here的更多信息

第二行

(struct iphdr *) (sendbuf + sizeof(struct ether_header));

它将sizeof(struct ether_header)添加到指针sendbuf,通过这样做,它在指向struct ether_header的指针占用之后到达内存区域,这似乎包含指向struct {的指针。 {1}}

这是sendbuf

的示意图
iphdr

答案 1 :(得分:1)

第一个是访问ethernet header ptr,接下来是访问iphdr ptr。 (以太网数据包包含IP数据包)