libuv multicast例子问题-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235601
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: c/c

2012-03-21 09:24:49

官方的例子:
test_impl(udp_multicast_join) {
  int r;
  uv_udp_send_t req;
  uv_buf_t buf;
  struct sockaddr_in addr = uv_ip4_addr("239.255.0.1", test_port);

  r = uv_udp_init(uv_default_loop(), &server);
  assert(r == 0);

  r = uv_udp_init(uv_default_loop(), &client);
  assert(r == 0);

  /* bind to the desired port */
  r = uv_udp_bind(&client, addr, 0);
  assert(r == 0);

  /* join the multicast channel */
  r = uv_udp_set_membership(&client, "239.255.0.1", null, uv_join_group);
  assert(r == 0);

  r = uv_udp_recv_start(&client, alloc_cb, cl_recv_cb);
  assert(r == 0);

  buf = uv_buf_init("ping", 4);

  /* server sends "ping" */
  r = uv_udp_send(&req, &server, &buf, 1, addr, sv_send_cb);
  assert(r == 0);

  assert(close_cb_called == 0);
  assert(cl_recv_cb_called == 0);
  assert(sv_send_cb_called == 0);

  /* run the loop till all events are processed */
  uv_run(uv_default_loop());

  assert(cl_recv_cb_called == 1);
  assert(sv_send_cb_called == 1);
  assert(close_cb_called == 2);

  return 0;
}
这段代码有个问题,multicast时本机也能收到数据.设置uv_udp_set_multicast_loop(&server, 0);也不起作用.
从代码上看,server没有bind,问题应该是出在这里.加上如下两句:
struct sockaddr_in addr2 = uv_ip4_addr("0.0.0.0", test_port 2);
uv_udp_bind(&server, addr2, 0);
再测试,本机收不到数据了.再加上uv_udp_set_multicast_loop(&server, 1) 本机又可以收到.测试环境是centos5.6,不同的环境可能表现不一样.官方写例子的时候应该是没有问题的.不过为了安全,所有的socket都bind一下好了.
阅读(4985) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图