select模型各个操作的总结
来源:互联网 发布:ida软件 编辑:程序博客网 时间:2024/06/01 21:02
在《unix网络编程》中,介绍了select模型可用于将多个阻塞的fd统一进行阻塞,其具体操作,以recv的操作为例总结如下:
FD_SET readSet; //fd的集合FD_ZERO(&readSet); //初始化while(1){ for(i=0; i<CONCOUNTS;i++) { if (pM->confd[i] >0) { FD_SET(pM->confd[i],&readSet); /*其中pM->confd[i]为accept之后得到的fd, *全部设置到监控fd的集合中 */ } } int ret=select(0,&readSet,NULL,NULL,NULL); /*有一个或多个fd接收到了数据,假设是n个, *这时readSet已经发生了变化,仅剩n个fd在集合中 */ for(i=0; i<CONCOUNTS;i++) { if(FD_ISSET(pM->confd[i],&readSet)) /*判断有哪n个fd在集合中,这n个fd接收到了数据*/ { recvLength =recv(pM->confd[i],commandString,COMLENGTH,0); /*直接调用recv,无需阻塞,正如《unix网络编程》所说, *省去了等待数据到来的阻塞,其实fd的连接只有一个的话, *直接调recv与select的结果一致的。 */ if (recvLength >0) { printf("recv:%s\n",commandString); memset(commandString,0,COMLENGTH); SetEvent(pM->conEvent); } } } //循环,继续监听各个accept之后得到的fd}
总结关键步骤:
- FD_SET(pM->confd[i],&readSet);//监听所有感兴趣的连接。
- int ret=select(0,&readSet,NULL,NULL,NULL);//有n个接受到数据,readSet仅剩这n个fd。
- FD_ISSET(pM->confd[i],&readSet);//得到这n个连接,并进行recv。
1 0
- select模型各个操作的总结
- Myeclipse的各个操作总结
- select poll 与epoll模型的总结
- 各个模型特征总结学习
- jquery 对select的操作总结
- jQuery 对<select> 的操作总结
- 关于select标签的一些操作总结
- jquery中对select的操作总结
- javascript 操作 select总结
- jquery操作select总结
- select模型的应用
- Select模型的学习
- winsock的select模型
- select模型的使用
- select模型的实现
- winsock的select模型
- winsock的select模型
- ACE的Select模型
- Java协程框架--Kilim工作原理
- HTML基础
- 成为一个Java的架构师要学习哪些知识
- 《大型多人在线游戏开发》读书笔记
- js学习网站
- select模型各个操作的总结
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- Android笔记之获得虚拟按键、状态栏高度
- 值传递、引用传递
- svm的简单理解
- Android 协调者布局 CoordinatorLayout简单认识
- Java协程框架--Kilim源码分析
- 为什么要在eclipse中安装hadoop-eclipse-plugins插件?
- Bootstrap 3