当前位置:首页 >> 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:描述字集合中包含有非套接口的元素。


相关文章:
select函数
select()函数说明 3页 免费 select()函数 4页 2下载券 linux中select函数 8页 1下载券 Select函数实现原理分析 6页 1下载券 linux下的Select函数 7页 1下载...
SELECT的使用方法
SELECT的使用方法_计算机软件及应用_IT/计算机_专业资料。scsSQL 查询就是利用 ..._list FROM table_source WHERE search_condition 下面介绍该语句的命令说明。...
select函数详解及应用
Select 的函数格式(我所说的是 Unix 系统下的伯克利 socket 编程,和 windows 下的有区别,一会儿说明): int select(int maxfdp,fd_set *readfds,fd_set *...
Select方法大集合(sql server)
[,…n] select 学号,成绩 from 课程注册 where 课程号='0001' order by 成绩 asc 对数据进行统计 使用集合函数:可以前带 DISTINCT 或 ALL 统计记录个数 ...
jquery操作select下拉框的多种方法(选中,取值,赋值等)
jquery操作select下拉框的多种方法(选中,取值,赋值等)_计算机软件及应用_IT/计算机_专业资料。Query 获取 Select 选择的 Text 和 Value: 语法解释: 1. $("#...
Select方法大集合
n] select 学号,成绩 from 课程注册 where 课程号='0001' order by 成绩 asc 对数据进行统计 使用集合函数:可以前带 DISTINCT 或 ALL 统计记录个数 COUNT(*)...
PivotSelect方法
PivotSelect方法_计算机软件及应用_IT/计算机_专业资料。PivotSelect 方法 选定数据透视表的一部分。 expression.PivotSelect(Name, Mode, UseStandardName) expression...
linux下c语言select函数用法
函数说明 select()用来等待文件描述词状态的改变。参数 n 代表最大的文件描述词加 1, readfds、 称为描述词组 词组, 参数 readfds、writefds 和 exceptfds 称...
第六章 Socket函数说明
Socket函数说明Socket函数说明隐藏>> 第六章 6.1 库函数综述 6.1.1 accept(...1. 利用 select()函数,通过检查套接字是否可写来判断连接请求是否完成。 如果...
Update、select使用方法
Update、select使用方法_IT/计算机_专业资料。Update、select 使用方法 、最常用的 update 语法是: UPDATE <table_name> SET <column_name1> = <value>, SET ...
更多相关标签: