当前位置:首页 >> IT/计算机 >>

select()函数说明


select()函数说明 函数说明

确定一个或多个套接口的状态,如需要则等待。 #include <winsock.h> int PASCAL FAR select( int nfds, fd_set FAR* readfds, fd_set FAR* exceptfds, const struct timeval FAR* timeout); fd_set FAR* writefds, nfds:是一个整数值,

是指集合中所有文件描述符的范围,即所有文件描述符的最大值加 1,不能错! 在 Windows 中这个参数的值无所谓,可以设置不正确。 readfds: (可选)指针, 指向一组等待可读性检查的套接口。 writefds: (可选)指针,指向一组等待可 写性检查的套接口。 口。 exceptfds: (可选)指针,指向一组等待错误检查的套接

timeout:select()最多等待时间,对阻塞操作则为 NULL。

本函数用于确定一个或多个套接口的状态。对每一个套接口,调用者可查询 它的可读性、 可写性及错误状态信息。 fd_set 结构来表示一组等待检查的套接 用 口。 在调用返回时, 这个结构存有满足一定条件的套接口组的子集, 并且 select() 返回满足条件的套接口的数目。有一组宏可用于对 fd_set 的操作,这些宏与 Berkeley Unix 软件中的兼容, 但内部的表达是完全不同的。 readfds 参数标识等 待可读性检查的套接口。 如果该套接口正处于监听 listen()状态, 则若有连接请求 到达,该套接口便被标识为可读,这样一个 accept()调用保证可以无阻塞完成。 对其他套接口而言,可读性意味着有排队数据供读取。或者对于 SOCK_STREAM 类型套接口来说,相对于该套接口的虚套接口已关闭,于是 recv 或 recvfrom 操 作均能无阻塞完成。如果虚电路被“优雅地”中止,则 recv()不读取数据立即返回; 如果虚电路被强制复位,则 recv 将以 WSAECONNRESET 错误立即返回。如果 SO_OOBINLINE 选项被设置,则将检查带外数据是否存在(参见 setsockopt()) 。 writefds 参数标识等待可写性检查的套接口。如果一个套接口正在 connect()连接 (非阻塞) 可写性意味着连接顺利建立。 , 如果套接口并未处于 connect()调用中, 可写性意味着 send 和 sendto 调用将无阻塞完成。 〔但并未指出这个保证在多长 时间内有效,特别是在多线程环境中〕 。 exceptfds 参数标识等待带外数据存在

性或意味错误条件检查的套接口。请注意如果设置了 SO_OOBINLINE 选项为假

FALSE,则只能用这种方法来检查带外数据的存在与否。对于 SO_STREAM 类型套 接口,远端造成的连接中止和 KEEPALIVE 错误都将被作为意味出错。如果套接口 正在进行连接 connect()(非阻塞方式) ,则连接试图的失败将会表现在 exceptfds 参数中。 如果对 readfds、writefds 或 exceptfds 中任一个组类不感兴趣,可将 在 winsock.h 头文件中共定义了四个宏来操作描述字集。

它置为空 NULL。

FD_SETSIZE 变量用于确定一个集合中最多有多少描述字(FD_SETSIZE 缺省值为 64,可在包含 winsock.h 前用#define FD_SETSIZE 来改变该值) 。对于内部表示, fd_set 被 表 示 成 一 个 套 接 口 的 队 列 , 最 后 一 个 有 效 元 素 的 后 续 元 素 为 INVAL_SOCKET 。 宏 为 : FD_CLR(s,*set) : 从 集 合 set 中 删 除 描 述 字 s 。 FD_SET(s,*set):向集 timeout 参数

FD_ISSET(s,*set):若 s 为集合中一员,非零;否则为零。 合添加描述字 s。

FD_ZERO(*set):将 set 初始化为空集 NULL。

控制 select 完成的时间。若 timeout 参数为空指针,则 select 将一直阻塞到有一 个描述字满足条件。 否则的话, timeout 指向一个 timeval 结构, 其中指定了 select 调用在返回前等待多长时间。如果 timeval 为{0,0},则 select 立即返回,这可用 于探询所选套接口的状态。 如果处于这种状态, select 调用可认为是非阻塞的, 则 且一切适用于非阻塞调用的假设都适用于它。举例来说,阻塞钩子函数不应被调 用,且 WINDOWS 套接口实现不应 yield。

返回值: 返回值: select()调用返回处于就绪状态并且已经包含在 fd_set 结构中的描述字总数; 如果超时则返回 0;否则的话,返回 SOCKET_ERROR 错误,应用程序可通过 WSAGetLastError 获取相应错误代码。 当返回位 0 时,所有描述符集清 0。 当返回为-1 时,不修改任何描述符集。 当返回为非 0 时,在 3 个描述符集里,依旧是 1 的位就是准备好的描述符。 这也就是为什么,每次用 select 后都要用 FD_ISSET 的原因。

错误代码 WSANOTINITIALISED:在使用此 API 之前应首先成功地调用 WSAStartup()。

WSAENETDOWN:WINDOWS 套接口实现检测到网络子系统失效。 WSAEINVAL: 超时时间值非法。 WSAEINTR: 通过一个 WSACancelBlockingCall()来取消一个 (阻 塞的)调用。 中。 WSAEINPROGRESS:一个阻塞的 WINDOWS 套接口调用正在运行

WSAENOTSOCK:描述字集合中包含有非套接口的元素。


相关文章:
C++网络编程Select函数用法详解
int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); 函数说明 select()用来等待文件描述词状态的改变。...
IUFO的MSELECT函数详解
IUFO的MSELECT函数详解_IT/计算机_专业资料。IUFO的MSELECT函数详解IUFO 的 MSELECT 函数详解 IUFO 函数说明 帐务取数函数是指从总帐取数, 指标函数是指从报表指标...
润乾报表常用函数
Select1 函数说明 从数据集中按顺序检索到符合过滤条件的第一条记录,返回其 selectExp 值 语法: datasetName.select1(selectExp{,filterExp{,rootGroupExp}}) ...
select函数
select函数_工学_高等教育_教育专区。搜集的select函数信息转自: 再论精确延时(usleep,nanosleep,select) /* make: gcc -o test_sleep test_sleep.c */ /* ...
select函数
select 函数目录 概况 操作程序 宏解释 socket 读写编辑本段 概况 select()的机制中提供一 fd_set 的数据结构,实际上是一 long 类型的数组, 每 一个数组元素...
windows编程中select函数的使用
int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout); 函数说明 select()用来等待文件描述词状态的改变。...
Select方法大集合(sql server)
[,…n] select 学号,成绩 from 课程注册 where 课程号='0001' order by 成绩 asc 对数据进行统计 使用集合函数:可以前带 DISTINCT 或 ALL 统计记录个数 ...
用在SELECT和WHERE子句中的函数
用在SELECT 和 WHERE 子句中的函数在一个 SQL 语句中的 select_expression 或...总是产生一个 NULL 值,否则除非表达式所包含 的操作符和函数在文档中说明。 ...
数据库常用函数
数据库常用函数_计算机软件及应用_IT/计算机_专业资料。一、基础 1、说明:创建...select a,b,c from tablename ta where a=(select max(a) from tablename...
SelectAll方法
SelectAll方法_计算机软件及应用_IT/计算机_专业资料。SelectAll 方法 在指定的 CanvasShapes、DiagramNodeChildren、DiagramNodes 或 Shapes 集 合中选取所有图形。 ex...
更多相关标签: