WSARecvDisconnect 函数 (winsock2.h)

WSARecvDisconnect 函数终止套接字上的接收,如果套接字面向连接,则检索断开连接数据。

语法

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

参数

[in] s

标识套接字的描述符。

[out] lpInboundDisconnectData

指向传入断开连接数据的指针。

返回值

如果未发生错误, 则 WSARecvDisconnect 返回零。 否则,将返回值 SOCKET_ERROR,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。

错误代码 含义
WSANOTINITIALISED
在使用此函数之前,必须成功调用 WSAStartup
WSAENETDOWN
网络子系统失败。
WSAEFAULT
参数 lpInboundDisconnectData 引用的缓冲区太小。
WSAENOPROTOOPT
指定的协议系列不支持断开连接数据。 请注意,不支持断开连接数据的 TCP/IP 实现不需要返回 WSAENOPROTOOPT 错误代码。 有关 TCP/IP 的 Microsoft 实现的信息,请参阅备注部分。
WSAEINPROGRESS
阻止 Windows Sockets 1.1 调用正在进行,或者服务提供程序仍在处理回调函数。
WSAENOTCONN
仅) 面向连接的套接字 (未连接套接字。
WSAENOTSOCK
:描述符不是套接字。

注解

WSARecvDisconnect 函数用于面向连接的套接字,以禁用接收并从远程方检索任何传入的断开连接数据。 这等效于关闭 (SD_RECEIVE) ,不同之处在于 WSARecvDisconnect 还允许在) 支持它的协议中接收断开连接数据 (。

成功发出此函数后,将禁止在套接字上进行后续接收。 调用 WSARecvDisconnect 对较低的协议层没有影响。 对于 TCP 套接字,如果套接字上仍有数据排队等待接收,或者数据随后到达,则会重置连接,因为无法将数据传递给用户。 对于 UDP,接受传入数据报并排队。 在任何情况下都不会生成 ICMP 错误数据包。

注意 Windows 上 TCP/IP 的本机实现不支持断开连接数据。 只有在其 WSAPROTOCOL_INFO 结构中具有 XP1_DISCONNECT_DATA 标志的 Windows 套接字提供程序才支持断开连接数据。 使用 WSAEnumProtocols 函数获取所有已安装提供程序 的WSAPROTOCOL_INFO 结构。
 
若要成功接收传入的断开连接数据,应用程序必须使用其他机制来确定线路已关闭。 例如,应用程序需要接收FD_CLOSE通知,接收零返回值,或者从 recv/WSARecv 接收 WSAEDISCONWSAECONNRESET 错误代码。

WSARecvDisconnect 函数不会关闭套接字,在调用 closesocket 之前,不会释放附加到套接字的资源。

无论套接字上的SO_LINGER设置如何, WSARecvDisconnect 函数都不会阻止。

应用程序不应依赖于在使用 WSARecvDisconnect 断开连接后能够重复使用套接字。 具体而言,Windows 套接字提供程序不需要支持在此类套接字上使用 connectWSAConnect

注意 发出阻止 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

另请参阅

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Winsock 函数

Winsock 参考

closesocket

connect

socket