PR_Poll

检测一组套接字文件描述符何时准备好进行 I/O 操作。

语法

#include <prio.h>

PRInt32 PR_Poll(
  PRPollDesc *pds,
  PRIntn npds,
  PRIntervalTime timeout);

参数

该函数具有以下参数

pds

指向 PRPollDesc 结构数组的第一个元素的指针。

npds

pds 数组中的元素数量。如果此参数为零,则 PR_Poll 等效于 PR_Sleep 且具有超时时间。

timeout

调用阻塞等待 I/O 就绪的时间量。如果在此时间到期之前没有任何 I/O 就绪,则 PR_Poll 返回零。

返回值

该函数返回以下值之一

  • 如果成功,则函数返回一个正数,表示 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_ERRPR_POLL_NVAL 标志仅在 out_flags 中使用。PR_Poll 始终会报告 PR_POLL_ERRPR_POLL_NVAL 事件。