tanhaibinyyy 2015-10-25 11:47 采纳率: 0%
浏览 1885

select 清空集合的问题

这里说每次轮询调用select函数都要FD_ZERO(&fds)清空集合,否则不能检测描述符变化。为什么?

  while(1)
  {
   FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化
   FD_SET(sock,&fds); //添加描述符
   FD_SET(fp,&fds); //同上
select(....)
}

  • 写回答

1条回答 默认 最新

  • Meditator_hkx 2015-10-25 11:54
    关注

    这个是socket编程里的同步选择机制select,我上学期刚好选修一门网络课程学了一些。
    在select机制中,FDZERO(会变斜体,我就不加下横杠啦~)是非常重要的。其实fds不过是一个缓冲区,用来记录哪些套接字上发生了可读/可写/异常行为。
    如果不清零,那么下一次检测时,会发现可读/可写行为等仍然存于套接字上,但实际上套接字并没有收到数据或者准备好写入数据啊~
    这个跟运营商流量清零是一样的道理:新的月份开始,我要重新计费。

    评论

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。