WSAPoll 函数 (winsock2.h)
WSAPoll 函数确定一个或多个套接字的状态。
语法
int WSAAPI WSAPoll(
[in, out] LPWSAPOLLFD fdArray,
[in] ULONG fds,
[in] INT timeout
);
参数
[in, out] fdArray
一个或多个 POLLFD 结构的数组,这些结构指定请求状态的套接字集。 数组必须至少包含一个具有有效套接字的结构。 返回后,此参数接收更新的套接字,并在每个套接字上设置与状态查询条件匹配的 revents 状态标志成员。
[in] fds
fdarray 中 WSAPOLLFD 结构的数目。 这不一定是请求其状态的套接字数。
[in] timeout
一个 值,该值根据以下值指定等待行为。
值 | 含义 |
---|---|
大于零 | 等待的时间(以毫秒为单位)。 |
零个 | 立即返回。 |
小于零 | 无限期等待。 |
返回值
返回以下值之一。
返回值 | 说明 |
---|---|
零个 | 在计时器过期之前,没有套接字处于查询状态。 |
大于零 | fdarray 中 POLLFD 结构的 revents 成员为非零的元素数。 |
SOCKET_ERROR | 出现了错误。 调用 WSAGetLastError 函数以检索扩展错误代码。 |
扩展错误代码 | 含义 |
---|---|
网络子系统失败。 | |
读取用户输入参数时发生异常。 | |
传递的参数无效。 如果在请求套接字状态时 fdarray 参数指向的 WSAPOLLFD 结构,则返回此错误。 如果 fdarray 参数指向的任何 WSAPOLLFD 结构的 fd 成员中指定的套接字均无效,则也会返回此错误。 | |
函数无法分配足够的内存。 |
注解
WSAPoll 函数在 Windows Vista 及更高版本上定义。
WSAPOLLFD 结构。 应用程序在 WSAPOLLFD 结构的 events 成员中设置相应的标志,以指定为每个相应套接字请求的状态类型。 WSAPoll 函数返回 WSAPOLLFD 结构的 revents 成员中套接字的状态。
对于每个套接字,调用方可以请求有关读取或写入状态的信息。 始终返回错误条件,因此无需请求有关它们的信息。
fdarray 参数指向的 WSAPOLLFD 结构。 不满足这些条件且没有错误条件的所有套接字都将将相应的 revents 成员设置为 0。
请求该套接字的状态时,可以在 WSAPOLLFD 结构中为给定套接字设置以下标志的组合:
标志 | 描述 |
---|---|
POLLPRI | 可以在不阻塞的情况下读取优先级数据。 Microsoft Winsock 提供程序不支持此标志。 |
POLLRDBAND | 优先级带 (带外) 数据可以不受阻止地读取。 |
POLLRDNORM | 正常数据可以在不阻塞的情况下读取。 |
POLLWRNORM | 正常数据可以在不阻塞的情况下写入。 |
POLLIN 标志定义为 POLLRDNORM 和 POLLRDBAND 标志值的组合。 POLLOUT 标志的定义与 POLLWRNORM 标志值相同。
WSAPOLLFD 结构只能包含 Winsock 提供程序支持的上述标志的组合。 任何其他值都被视为错误, WSAPoll 将返回 SOCKET_ERROR。 对 WSAGetLastError 函数的后续调用将检索 WSAEINVAL 的扩展错误代码。 如果在 Microsoft Winsock 提供程序的套接字上设置了 POLLPRI 标志, 则 WSAPoll 函数将失败。
当 fdarray 参数指向的 WSAPOLLFD 结构指示套接字状态时:
标志 | 描述 |
---|---|
POLLERR | 出现错误。 |
POLLHUP | 面向流的连接已断开连接或中止。 |
POLLNVAL | 使用了无效的套接字。 |
POLLPRI | 可以在不阻塞的情况下读取优先级数据。 Microsoft Winsock 提供程序不返回此标志。 |
POLLRDBAND | 优先级带 (带外) 数据可以不受阻止地读取。 |
POLLRDNORM | 正常数据可以在不阻塞的情况下读取。 |
POLLWRNORM | 正常数据可以在不阻塞的情况下写入。 |
关于 TCP 和 UDP 套接字:
- WSAPOLLFD 结构与 POLLRDNORM 一样正常数据。
- WSAPOLLFD 结构,保证后续 的 recv 操作在不阻塞的情况下完成。
- POLLWRNORM 的 WSAPOLLFD 结构。
- 由 POLLRDNORM 提供的 WSAPOLLFD 结构。 后续对 accept 的调用保证不会阻塞地完成。
- 由 POLLRDBAND 提供的 WSAPOLLFD 结构。
- 当远程对等机关闭发送操作 (收到 TCP FIN) 时,WSAPOLLFD 结构。 后续 的 recv 函数请求将返回零个字节。
- 远程对等机启动正常断开连接时的 WSAPOLLFD 结构。
- 当远程对等方突然断开连接时返回 WSAPOLLFD 结构。
- 关闭本地套接字时的 WSAPOLLFD 结构。
fdarray 中) (非套接字的元素数由 nfds 指示。 其 fd 成员设置为负值的 fdarray 成员将被忽略,并且返回时,其重泄将设置为 POLLNVAL。 此行为对于维护固定 fdarray 分配的应用程序很有用,并且不会压缩数组以删除未使用的条目或重新分配内存。 在调用 WSAPoll 之前,无需清除任何元素的 revent。
timeout 参数指定函数在返回之前等待的时间。 正值包含返回前等待的毫秒数。 零值强制 WSAPoll 立即返回,负值指示 WSAPoll 应无限期等待。
Windows 8.1和Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8.1、Windows Vista [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winsock2.h (包括 Winsock2.h) |
Library | Ws2_32.lib |
DLL | Ws2_32.dll |