LPWSPSELECT 回调函数 (ws2spi.h)
LPWSPSelect 函数确定一个或多个套接字的状态。
语法
LPWSPSELECT Lpwspselect;
int Lpwspselect(
[in] int nfds,
[in, out] fd_set *readfds,
[in, out] fd_set *writefds,
[in, out] fd_set *exceptfds,
[in] const timeval *timeout,
[out] LPINT lpErrno
)
{...}
参数
[in] nfds
仅为了兼容性而忽略并包含。
[in, out] readfds
指向要检查的一组套接字的可选指针,以便进行可读性。
[in, out] writefds
可选指针,指向要检查的一组套接字是否可写。
[in, out] exceptfds
一组要检查错误的套接字的可选指针。
[in] timeout
LPWSPSelect 等待或 null 阻塞操作的最长时间,其形式为 时间 结构。
[out] lpErrno
指向错误代码的指针。
返回值
LPWSPSelect 函数返回已准备好并包含在 fd_set 结构中的描述符的总数,或SOCKET_ERROR(如果发生错误)。 如果返回值SOCKET_ERROR,lpErrno中提供了特定的错误代码。
错误代码 | 意义 |
---|---|
Windows 套接字服务提供商无法为其内部操作分配所需的资源,或者 读取、写、 或 时间范围 参数除外。 | |
网络子系统已失败。 | |
超时 值无效,或者所有三个描述符参数都 NULL。 | |
(阻止)呼叫通过 LPWSPCancelBlockingCall取消。 | |
正在阻止 Windows 套接字调用,或者服务提供商仍在处理回调函数。 | |
描述符集之一包含的条目不是套接字。 |
言论
此函数用于确定一个或多个套接字的状态。 对于每个套接字,调用方可以请求有关读取、写入或错误状态的信息。 请求给定状态的套接字集由 fd_set 结构指示。 fd_set 中的所有条目都对应于服务提供商创建的套接字(也就是说,描述其协议的 WSAPROTOCOL_INFO 结构具有相同 providerId 值)。 返回后,结构将更新以反映满足指定条件的这些套接字的子集,LPWSPSelect 返回满足条件的套接字总数。 提供了一组用于操作 fd_set的宏。 这些宏与伯克利软件中使用的宏兼容,但基础表示形式完全不同。
参数 读取 标识要检查的套接字是否可读。 如果套接字当前正在侦听 LPWSPListen,则如果收到传入连接请求,则会将其标记为可读,以便保证 LPWSPAccept 完成而不阻止。 对于其他套接字,可读性意味着队列数据可用于读取,以便保证无法阻止 LPWSPRecv 或 LPWSPRecvFrom。
对于面向连接的套接字,可读性还可以指示已从对等方收到关闭请求。 如果虚拟线路正常关闭,则 LPWSPRecv 将立即返回零字节读取。 如果虚拟线路已重置,则 LPWSPRecv 将立即完成错误代码,例如 WSAECONNRESET。 如果已启用套接字选项SO_OOBINLINE,将检查 OOB 数据是否存在(请参阅 LPWSPSetSockOpt)。
参数 writefds 标识要检查的套接字是否可写:
- 如果套接字通过 LPWSPConnect进行连接,可写性意味着连接建立已成功完成。
- 如果套接字未通过 LPWSPConnect进行侦听,可写性意味着可以成功 LPWSPSend 或 LPWSPSendTo。
但是,如果 len 超过可用的传出系统缓冲区空间量,则可以在阻止套接字上阻止它们。 未指定这些保证的有效期,尤其是在多线程环境中。
参数 标识要检查是否存在 OOB 数据或任何异常错误条件的套接字。 请注意,仅当选项SO_OOBINLINE FALSE时,才会以这种方式报告 OOB 数据。 如果套接字 LPWSPConnect(非阻止)连接,则连接尝试失败 除外。 此规范不定义将包含哪些其他错误。
、
摘要:当 LPWSPSelect 根据以下内容返回时,将在特定集中标识套接字。
参数 | 描述 |
---|---|
自述: | 如果调用 LPWSPListen,则连接挂起,LPWSPAccept 将成功。数据可用于读取(如果启用了SO_OOBINLINE,则包括 OOB 数据)。连接已关闭/重置/终止。 |
writefds: | 如果 LPWSPConnect(非阻止),则连接已成功。可以发送数据。 |
除fds: | 如果 LPWSPConnect(非阻止),则连接尝试失败。OOB 数据可用于读取(仅当禁用SO_OOBINLINE时)。 |
头文件 Ws2spi.h 中定义了三个宏和一个 gpall 函数,用于操作和检查描述符集。 变量FD_SETSIZE确定集中描述符的最大数目。 (FD_SETSIZE的默认值为 64,可在 #including Ws2spi.h 之前将 #defining FD_SETSIZE 修改为另一个值。在内部,fd_set 中的套接字句柄不表示为 Berkeley UNIX 中的位标志。 其数据表示不透明。 使用这些宏可维护不同套接字环境之间的软件可移植性。
用于操作和检查 fd_set 内容的宏包括:
-
FD_CLR(s, *set)
-
从 集中删除描述符 。
-
FD_SET(s, *set)
-
将描述符 添加到 集。
-
FD_ZERO(*集)
-
将
集初始化为 null 集。
用于检查成员身份的httpall 函数为:
-
intWPUFDIsSet(SOCKETs,FD_SET FAR *set);
-
如果
是 或其他零 集的成员,则返回非零。
参数 超时 控制 LPWSPSelect 可能需要多长时间才能完成。 如果 超时 是一个 null 指针,LPWSPSelect 将无限期阻止,直到至少有一个描述符满足指定条件。 否则,超时 指向 时间 结构,该结构指定 LPWSPSelect 在返回前应等待的最大时间。 LPWSPSelect 返回时,不会更改 时间 结构的内容。 如果 时间 初始化为 {0, 0},LPWSPSelect 将立即返回;这用于轮询所选套接字的状态。 如果是这种情况,则 LPWSPSelect 调用被视为非阻止,并且将应用非阻止调用的标准假设。 例如,不会调用阻塞挂钩,并且 Windows 套接字提供程序不会生成。
注意
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | ws2spi.h |