PR_Poll¶
检测一组套接字文件描述符何时准备好进行 I/O 操作。
语法¶
#include <prio.h>
PRInt32 PR_Poll(
PRPollDesc *pds,
PRIntn npds,
PRIntervalTime timeout);
参数¶
该函数具有以下参数
返回值¶
该函数返回以下值之一
如果成功,则函数返回一个正数,表示
pds
中具有事件的PRPollDesc
结构的数量。值 0 表示函数超时。
值 -1 表示函数失败。可以通过调用 PR_GetError 获取失败的原因。
描述¶
此函数在底层套接字对象上的一个或多个 I/O 就绪时立即返回。除非发生超时,否则会返回就绪描述符的数量,在这种情况下,会返回零。
PRPollDesc
数据结构的 in_flags
字段应设置为调用方感兴趣的 I/O 事件(可读、可写、异常或某些组合)。成功返回后,PRPollDesc
数据结构的 out_flags
字段将设置为指示相应描述符上哪种 I/O 就绪。PR_Poll 在调用期间使用 out_flags
字段作为临时变量。如果 PR_Poll 返回 0 或 -1,则 out_flags
字段不包含有意义的值,不得使用。
PRPollDesc
结构定义如下
struct PRPollDesc {
PRFileDesc* fd;
PRInt16 in_flags;
PRInt16 out_flags;
};
typedef struct PRPollDesc PRPollDesc;
该结构具有以下字段
fd
指向表示套接字或可轮询事件的 PRFileDesc 对象的指针。此字段可以设置为
NULL
以指示 PR_Poll 忽略此PRFileDesc object
。注意
在 Unix 上,
fd
字段可以设置为指向任何 PRFileDesc 对象的指针,包括表示文件或管道的指针。跨平台应用程序应仅将fd
字段设置为指向表示套接字或可轮询事件的 PRFileDesc 对象的指针,因为在 Windows 上,select
函数只能与套接字一起使用。in_flags
以下位标志的按位
OR
PR_POLL_READ:
fd
可读。PR_POLL_WRITE:
fd
可写。PR_POLL_EXCEPT:
fd
存在异常情况。
out_flags
以下位标志的按位
OR
PR_POLL_READ
PR_POLL_WRITE
PR_POLL_EXCEPT
PR_POLL_ERR:
fd
存在错误。PR_POLL_NVAL:
fd
无效。
请注意,PR_POLL_ERR
和 PR_POLL_NVAL
标志仅在 out_flags
中使用。PR_Poll 始终会报告 PR_POLL_ERR
和 PR_POLL_NVAL
事件。