LPWSPRECVDISCONNECT 回调函数 (ws2spi.h)

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

语法

LPWSPRECVDISCONNECT Lpwsprecvdisconnect;

int Lpwsprecvdisconnect(
  [in]  SOCKET s,
  [out] LPWSABUF lpInboundDisconnectData,
  [out] LPINT lpErrno
)
{...}

参数

[in] s

标识套接字的描述符。

[out] lpInboundDisconnectData

指向要向其复制断开连接数据的缓冲区的指针。

[out] lpErrno

指向错误代码的指针。

返回值

如果未发生错误, 则 LPWSPRecvDisconnect 返回零。 否则,返回值 SOCKET_ERROR,并在 lpErrno 中提供特定的错误代码。

错误代码 含义
WSAENETDOWN
网络子系统失败。
WSAEFAULT
参数 lpInboundDisconnectData 引用的缓冲区太小。
WSAENOPROTOOPT
指定的协议系列不支持断开连接数据。
WSAEINPROGRESS
正在阻止 Windows 套接字调用,或者服务提供程序仍在处理回调函数。
WSAENOTCONN
仅) 面向连接的套接字 (套接字未连接。
WSAENOTSOCK
:描述符不是套接字。

注解

在面向连接的套接字上使用 LPWSPRecvDisconnect 来禁用接收,并从远程方检索任何传入的断开连接数据。

成功发出此函数后,将禁止在套接字上进行后续接收。 这不会影响较低的协议层。 对于 TCP,TCP 窗口不会更改,传入数据将被接受 (但不会) 确认,直到该窗口用完为止。 对于 UDP,接受传入数据报并排队。 在任何情况下都不会生成 ICMP 错误数据包。

若要成功接收传入的断开连接数据,Windows 套接字 SPI 客户端必须使用其他机制来确定线路是否已关闭。 例如,客户端需要接收FD_CLOSE通知,或者从 LPWSPRecv 获取零返回值或 WSAEDISCON 错误代码。

请注意, LPWSPRecvDisconnect 不会关闭套接字,在调用 LPWSPCloseSocket 之前,不会释放附加到套接字的资源。

注意

无论套接字上的SO_LINGER设置如何,LPWSPRecvDisconnect 都不会阻止。 Windows 套接字 SPI 客户端不应依赖于在 LPWSPRecvDisconnected 之后能够重复使用套接字。 具体而言,Windows 套接字提供程序不需要支持在此类套接字上使用 LPWSPConnect

要求

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

另请参阅

LPWSPConnect

LPWSPSocket