Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234899
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 296
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-22 11:52
文章分类

全部博文(31)

文章存档

2018年(3)

2017年(11)

2016年(12)

2015年(5)

我的朋友

分类: C/C++

2018-01-05 15:01:20

1.关于组播的
问题描述:加入组播组使用struct ip_mreqn,通过ip和网卡index 加入,离开组播组的时候使用struct ip_mreq ,只通过ip 离开,当网卡ip先清除,再离开组播组的话,无法通过ip找到对应的网卡,离开失败。
查看内核ip_mc_find_dev 发现,查找网卡的顺序是先index,然后ip,最后目的ip路由对应的出接口,因此用网卡index应该是可以的,但是修改了离开组播组的数据结构struct ip_mreq 为struct ip_mreqn 之后还是不行,这样不合理啊!!!只能把代码拿出来单独测试,用strace 跟踪发现原来是setsockopt的最后一个参数sizeof(struct ip_mreq) 没有改过来,汗!

2.关于tcp的
系统参数tcp_syn_retries,会影响connect超时时间,内核里面syn 重试的时间间隔是3,6,12... 这样的,如果tcp_syn_retries 设置为3,那么内核connect连接超时时间大概是40多秒,如果应用层程序设置的connect 超时时间超过内核的重连次数所对应的超时时间,那么内核会提前返回结果,在应用层程序看来就是超时时间不准确.这个可以通过调整系统参数tcp_syn_retries 来修改

3.关于udp的
(1)如果是没有connect的udp,sendto 之后系统会给socket分配一个端口号,通过getsockname 可以获取到这个系统分配的端口后,netstat -naup 也可以看到这个进程监听在这个端口号上
(2) 对于udp的端口的监听检查,只能区分网络正常的情况,服务器是否监听该端口,对于ip不存在,或者网络不通的情况无法区分。nc 工具存在同样的问题,当ip不存在的时候,nc  -zvu 192.168.5.10 80,会显示成功的
阅读(2257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~