WSARecvDisconnect 函数 (winsock2.h)
WSARecvDisconnect 函数终止套接字上的接收,如果套接字面向连接,则检索断开连接数据。
语法
int WSAAPI WSARecvDisconnect(
[in] SOCKET s,
[out] LPWSABUF lpInboundDisconnectData
);
参数
[in] s
标识套接字的描述符。
[out] lpInboundDisconnectData
指向传入断开连接数据的指针。
返回值
如果未发生错误, 则 WSARecvDisconnect 返回零。 否则,将返回值 SOCKET_ERROR,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。
错误代码 | 含义 |
---|---|
在使用此函数之前,必须成功调用 WSAStartup 。 | |
网络子系统失败。 | |
参数 lpInboundDisconnectData 引用的缓冲区太小。 | |
指定的协议系列不支持断开连接数据。 请注意,不支持断开连接数据的 TCP/IP 实现不需要返回 WSAENOPROTOOPT 错误代码。 有关 TCP/IP 的 Microsoft 实现的信息,请参阅备注部分。 | |
阻止 Windows Sockets 1.1 调用正在进行,或者服务提供程序仍在处理回调函数。 | |
仅) 面向连接的套接字 (未连接套接字。 | |
:描述符不是套接字。 |
注解
WSARecvDisconnect 函数用于面向连接的套接字,以禁用接收并从远程方检索任何传入的断开连接数据。 这等效于关闭 (SD_RECEIVE) ,不同之处在于 WSARecvDisconnect 还允许在) 支持它的协议中接收断开连接数据 (。
成功发出此函数后,将禁止在套接字上进行后续接收。 调用 WSARecvDisconnect 对较低的协议层没有影响。 对于 TCP 套接字,如果套接字上仍有数据排队等待接收,或者数据随后到达,则会重置连接,因为无法将数据传递给用户。 对于 UDP,接受传入数据报并排队。 在任何情况下都不会生成 ICMP 错误数据包。
注意 Windows 上 TCP/IP 的本机实现不支持断开连接数据。 只有在其 WSAPROTOCOL_INFO 结构中具有 XP1_DISCONNECT_DATA 标志的 Windows 套接字提供程序才支持断开连接数据。 使用 WSAEnumProtocols 函数获取所有已安装提供程序 的WSAPROTOCOL_INFO 结构。
WSARecvDisconnect 函数不会关闭套接字,在调用 closesocket 之前,不会释放附加到套接字的资源。
无论套接字上的SO_LINGER设置如何, WSARecvDisconnect 函数都不会阻止。
应用程序不应依赖于在使用 WSARecvDisconnect 断开连接后能够重复使用套接字。 具体而言,Windows 套接字提供程序不需要支持在此类套接字上使用 connect 或 WSAConnect 。
注意 发出阻止 Winsock 调用(如 WSARecvDisconnect)时,Winsock 可能需要等待网络事件,然后调用才能完成。 在这种情况下,Winsock 执行可发出警报的等待, (在同一线程上计划的 APC) 异步过程调用可能会中断该等待。 在 APC 内发出另一个阻止 Winsock 调用,该调用中断了同一线程上正在进行的阻止 Winsock 调用将导致未定义的行为,并且 Winsock 客户端绝不能尝试。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winsock2.h |
Library | Ws2_32.lib |
DLL | Ws2_32.dll |