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中提供了特定的错误代码。

错误代码 意义
WSAEFAULT
Windows 套接字服务提供商无法为其内部操作分配所需的资源,或者 读取时间范围 参数除外。
WSAENETDOWN
网络子系统已失败。
WSAEINVAL
超时 值无效,或者所有三个描述符参数都 NULL
WSAEINTR
(阻止)呼叫通过 LPWSPCancelBlockingCall取消。
WSAEINPROGRESS
正在阻止 Windows 套接字调用,或者服务提供商仍在处理回调函数。
WSAENOTSOCK
描述符集之一包含的条目不是套接字。

言论

此函数用于确定一个或多个套接字的状态。 对于每个套接字,调用方可以请求有关读取、写入或错误状态的信息。 请求给定状态的套接字集由 fd_set 结构指示。 fd_set 中的所有条目都对应于服务提供商创建的套接字(也就是说,描述其协议的 WSAPROTOCOL_INFO 结构具有相同 providerId 值)。 返回后,结构将更新以反映满足指定条件的这些套接字的子集,LPWSPSelect 返回满足条件的套接字总数。 提供了一组用于操作 fd_set的宏。 这些宏与伯克利软件中使用的宏兼容,但基础表示形式完全不同。

参数 读取 标识要检查的套接字是否可读。 如果套接字当前正在侦听 LPWSPListen,则如果收到传入连接请求,则会将其标记为可读,以便保证 LPWSPAccept 完成而不阻止。 对于其他套接字,可读性意味着队列数据可用于读取,以便保证无法阻止 LPWSPRecvLPWSPRecvFrom

对于面向连接的套接字,可读性还可以指示已从对等方收到关闭请求。 如果虚拟线路正常关闭,则 LPWSPRecv 将立即返回零字节读取。 如果虚拟线路已重置,则 LPWSPRecv 将立即完成错误代码,例如 WSAECONNRESET。 如果已启用套接字选项SO_OOBINLINE,将检查 OOB 数据是否存在(请参阅 LPWSPSetSockOpt)。

参数 writefds 标识要检查的套接字是否可写:

但是,如果 len 超过可用的传出系统缓冲区空间量,则可以在阻止套接字上阻止它们。 未指定这些保证的有效期,尤其是在多线程环境中。

参数 标识要检查是否存在 OOB 数据或任何异常错误条件的套接字。 请注意,仅当选项SO_OOBINLINE FALSE时,才会以这种方式报告 OOB 数据。 如果套接字 LPWSPConnect(非阻止)连接,则连接尝试失败 除外。 此规范不定义将包含哪些其他错误。

的任何两个 自述,如果未检查描述符是否符合相关条件,则可以 null。 至少有一个必须是非null,任何非null 描述符集必须至少包含一个套接字描述符。

摘要:当 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 函数为:

intWPUFDIsSetSOCKETsFD_SET FAR *set);

如果 是 或其他零 集的成员,则返回非零。

参数 超时 控制 LPWSPSelect 可能需要多长时间才能完成。 如果 超时 是一个 null 指针,LPWSPSelect 将无限期阻止,直到至少有一个描述符满足指定条件。 否则,超时 指向 时间 结构,该结构指定 LPWSPSelect 在返回前应等待的最大时间。 LPWSPSelect 返回时,不会更改 时间 结构的内容。 如果 时间 初始化为 {0, 0},LPWSPSelect 将立即返回;这用于轮询所选套接字的状态。 如果是这种情况,则 LPWSPSelect 调用被视为非阻止,并且将应用非阻止调用的标准假设。 例如,不会调用阻塞挂钩,并且 Windows 套接字提供程序不会生成。

注意

LPWSPSelect 函数对向 LPWSPAsyncSelect 注册的套接字事件的持久性没有影响,也不会影响 LPWSPEventSelect

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
标头 ws2spi.h

另请参阅

LPWSPAccept

LPWSPConnect

LPWSPEventSelect

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo