select 与 fd_set
来源:互联网 发布:电脑小说阅读软件 编辑:程序博客网 时间:2024/05/16 10:08
select(),确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。
用途:
确定一个或多个套接口的状态,如需要则等待。
#include <winsock.h>int PASCAL FAR select( int nfds, fd_set FAR* readfds, fd_set FAR* writefds, fd_set FAR* exceptfds, const struct timeval FAR* timeout);
nfds:是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!在Windows中这个参数的值无所谓,可以设置不正确。
readfds:(可选)指针,指向一组等待可读性检查的套接口。
writefds:(可选)指针,指向一组等待可写性检查的套接口。
exceptfds:(可选)指针,指向一组等待错误检查的套接口。
timeout:select()最多等待时间,对阻塞操作则为NULL。
返回值:
select()调用返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;如果超时则返回0;否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError获取相应错误代码。
当返回为-1时,所有描述符集清0。
当返回为0时,超时不修改任何描述符集。
当返回为非0时,在3个描述符集里,依旧是1的位就是准备好的描述符。这也就是为什么,每次用select后都要用FD_ISSET的原因。
fd_set:
select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一socket或文件发生了可读或可写事件。
常见用法:
fd_set set;FD_ZERO(&set); /*将set清零使集合中不含任何fd*/FD_SET(fd, &set); /*将fd加入set集合*/FD_CLR(fd, &set); /*将fd从set集合中清除*/FD_ISSET(fd, &set); /*在调用select()函数后,用FD_ISSET来检测fd在fdset集合中的状态是否变化返回整型,当检测到fd状态发生变化时返回真,否则,返回假(0)*/
以上式子中的fd为socket句柄。
0 0
- fd_set与select
- fd_set与select(转)
- select 与 fd_set
- select 与 fd_set
- select 与 fd_set
- fd_set与select
- fd_set select
- select系统调用与FD_SET,FD_ISSET,FD_ZERO
- select系统调用与FD_SET,FD_ISSET,FD_ZERO
- select 和 struct fd_set
- Linux: fd_set和select()
- FD_SET,FD_ISSET,FD_ZERO,select
- select()和fd_set
- FD_SET,FD_ISSET,FD_ZERO,select
- linux select和fd_set
- select机制中FD_SET
- fd_set & select函数学习
- select函数及fd_set
- Javascript 封装方法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 数据结构(JAVA版本)练习之集合 简易图书管理系统
- hdu4740 搜索(会爆栈,需要手动开辟)
- Linux 的多线程编程的高效开发经验
- select 与 fd_set
- 冒泡排序
- 日期拆分并赋值给calendar
- vs2013 本地化
- IOS版本更新过程中遇到未能创建图标的问题
- 深思
- 第二章 环境搭建
- Vi/Vim查找替换使用方法
- 有效减少网页加载时间