Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > select()的用法
【标  题】:select()的用法
【关键字】:select
【来  源】:http://www.cublog.cn/u/15315/showart.php?id=153547

select()的用法

Your Ad Here
FD_ZERO,FD_ISSET这些都是套节字结合操作宏
看看MSDN上的select函数,
这是在select io 模型中的核心,用来管理套节字IO的,避免出现无辜锁定.
int select(  int nfds,fd_set FAR *readfds,  fd_set FAR *writefds,             
  fd_set FAR *exceptfds,       
  const struct timeval FAR *timeout 
);
第一个参数不管,是兼容目的,最后的是超时标准,select是阻塞操作
当然要设置超时事件.
接着的三个类型为fd_set的参数分别是用于检查套节字的可读性,可写性,和列外数据性质.

我举个例子
比如recv(), 在没有数据到来调用它的时候,你的线程将被阻塞
如果数据一直不来,你的线程就要阻塞很久.这样显然不好.
所以采用select来查看套节字是否可读(也就是是否有数据读了)
步骤如下
socket s;
.....
fd_set set;
while(1)

  FD_ZERO(&set);//将你的套节字集合清空
  FD_SET(s, &set);//加入你感兴趣的套节字到集合,这里是一个读数据的套节字s
  select(0,&set,NULL,NULL,NULL);//检查套节字是否可读,
                           //很多情况下就是是否有数据(注意,只是说很多情况)
                           //这里select是否出错没有写
  if(FD_ISSET(s, &set) //检查s是否在这个集合里面,
  {                     //select将更新这个集合,把其中不可读的套节字去掉
                        //只保留符合条件的套节字在这个集合里面
               
      recv(s,...);
 
  }
  //do something here
}
VC调用其他程序:【上一篇】
ZJU_ACM:【下一篇】
【相关文章】
  • 今天学到一招 sp_msforeachtable 'select count(*) from ?'
  • 运用Ajax通过select下拉框能得到数据
  • 控制select的宽度
  • 一个select标签的二级联动的例子(笔记)
  • select poll使用
  • 不修改SQL表结构,改变列显示次序(非Select语句)
  • SubItem Selection in List Control改进版
  • select语句使用技巧
  • 禁止select控件(javascript)
  • 产生select控件选项程序
  • 【随机文章】
  • IP地址ABC
  • 开发J2EE应用应遵循的几点原则
  • 文件系统的备份与恢复(ufsdump ufsrestore)
  • 《仙境传说RO》异常状态总结
  • Certmgr.exe逆向工程之一 简介
  • 1999年全国计算机等级考试四级试卷
  • Linux简史
  • Ulead SmartSaver Pro 3.0秘籍点点通(二)
  • 在Servlet中调用google的API
  • 我的JSP学习手册(9)-实例应用-IP查询
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.