Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527312
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: 嵌入式

2009-10-03 10:40:07

在处理加入及离开组播组时,我们总是调用setsockopt,代码写起来其实很简单:
  struct ip_mreq mr;

  memset (&mr, 0, sizeof (struct ip_mreq));
  mr.imr_multiaddr = mc_addr;
  mr.imr_interface = if_addr;
  setsockopt (sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,(char *) &mr, sizeof (mr));

其中mr.imr_interface是一个ipv4的地址,用于选择要加入的接口,即if_addr是要加入的接口上配置的一个ip地址.可是前一段时间在开发ospf协议时,发现了一个问题:对于unnumbered-point-to-point接口,并没有配置ip地址,那如何选择接口呢?答案是vxworks可以直接使用ifindex选择地址,即
  struct ip_mreq mr;

  memset (&mr, 0, sizeof (struct ip_mreq));
  mr.imr_multiaddr = mc_addr;
  mr.imr_interface = if_index;
  setsockopt (sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,(char *) &mr, sizeof (mr));

这里的ifindex是在os中使用的接口ifindex.对于如何区分ifindex与ipv4 address, os(vxworks)使用了一个所设:ifindex不会大于0x00ffffff,而ip地址的最高byte不会为0.这种方式与以太网类型字段/长度区分有异曲同工之处.

同理,离开组播组时,也可以使用这一方法,即使用ifindex而不是接口ip地址来选择接口.
阅读(1555) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:vxworks(2.0.2)版本中对于arp的处理

给主人留下些什么吧!~~