select()

select(),肯定一个或多个 套接口的状态,本函数用于肯定一个或多个套接口的状态,对每个套接口,调用者可查询它的可读性、可写性及错误状态信息,用 fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有知足必定条件的 套接口组的子集,而且select()返回知足条件的套接口的数目。有一组宏可用于对fd_set的操做,这些宏与Berkeley Unix软件中的兼容,但内部的表达是彻底不一样的。
中文名
select()
做    用
肯定套接字
系    统
unix
返    回
知足条件的套接口的数目

简述编辑

肯定一个或多个 套接口的状态,如:须要则等待。
#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。

注释编辑

readfds参数标识等待可读性检查的套接口。若是该套接口正处于监听 listen()状态,则如有链接请求到达,该套接口便被标识为可读,这样一个 accept()调用保证能够无阻塞完成,对其余套接口而言,可读性意味着有排队数据供读取。或者对于SOCK_STREAM类型套接口来讲,相对于该套接口的虚套接口已关闭,因而 recv()recvfrom()操做均能无阻塞完成,writefds参数标识等待可写性检查的套接口。若是一个套接口正在 connect()链接(非阻塞),可写性意味着链接顺利创建。若是套接口并未处于connect()调用中,可写性意味着 send()sendto()调用将无阻塞完成。〔但并未指出这个保证在多长时间内有效,特别是在多线程环境中〕。
exceptfds参数标识等待带外数据存在性或意味错误条件检查的套接口,请注意若是设置了SO_OOBINLINE选项为假FALSE,则只能用这种方法来检查带外数据的存在与否,对于SO_STREAM类型套接口,远端形成的链接停止和KEEPALIVE错误都将被做为意味出错。若是套接口正在进行链接connect()(非阻塞方式),则链接试图的失败将会表如今exceptfds参数中。
若是对readfds、writefds或exceptfds中任一个组类不感兴趣,可将它置为空NULL。
在winsock.h头文件中共定义了四个宏来操做描述字集。FD_SETSIZE变量用于肯定一个集合中最多有多少描述字(FD_SETSIZE缺省值为64,可在包含winsock.h前用#define FD_SETSIZE来改变该值)。对于内部表示,fd_set被表示成一个套接口的队列,最后一个有效元素的后续元素为INVAL_SOCKET。宏为:FD_CLR(s,*set):从集合set中删除描述字s。 FD_ISSET(s,*set):若s为集合中一员,非零;不然为零。 FD_SET(s,*set):向集合添加描述字s。FD_ZERO(*set):将set初始化为空集NULL。
timeout参数控制select完成的时间。若timeout参数为空指针,则select将一直阻塞到有一个描述字知足条件,不然的话,timeout指向一个 timeval结构,其中指定了select调用在返回前等待多长时间。若是timeval为{0,0},则select当即返回,这可用于探询所选套接口的状态,若是处于这种状态,则select调用可认为是非阻塞的,且一切适用于非阻塞调用的假设都适用于它,举例来讲,阻塞 钩子函数不该被调用,且WINDOWS 套接口实现不该yield。

返回值编辑

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

错误代码编辑

WSANOTINITIALISED:在使用此 API以前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS 套接口实现检测到网络子系统失效。
WSAEINVAL:超时时间值非法,
WSAEINTR:经过一个 WSACancelBlockingCall()来取消一个阻塞的
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAENOTSOCK:描述字集合中包含有非套接口的元素。

相关参考编辑

WSAAsyncSelect(), accept(), connect(), recv(), recvfrom(),send()。

事件用法编辑

概述
触发每个匹配元素的select事件
这个函数会调用执行绑定到select事件的全部函数,包括浏览器的默认行为。能够经过在某个绑定的函数中返回false来防止触发浏览器的默认行为。
返回值
jQuery
示例
触发全部input元素的select事件:
jQuery 代码:
$("input").select();
相关文章
相关标签/搜索