CAsyncSocket::Receive
调用该成员函数接收从套接字的数据。
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0
);
参数
lpBuf
输入数据的缓冲区。nBufLen
lpBuf 的字节长度。nFlags
指定调用了的方式。 套接字选项和参数 nFlags 依赖于此函数语义。 后者将以下值中的任何一个构造与C++ OR 运算符:在详细介绍数据的MSG_PEEK 偷看。 该数据复制到缓冲区,但从输入队列不会被取消。
MSG_OOB 处理带外数据。
返回值
如果未发生错误,Receive 返回接收到的字节数。 如果连接已关闭,则返回0。 否则,SOCKET_ERROR 的值返回,并且,特定错误代码可以通过调用 GetLastError检索。 下面的错误适用于此成员函数:
WSANOTINITIALISED 的成功的 AfxSocketInit 必须在使用此API之前发生。
WSAENETDOWN Windows套接字实现检测网络子系统失败。
WSAENOTCONN 套接字未连接。
块Windows套接字操作的WSAEINPROGRESS 的进度中。
WSAENOTSOCK 描述符不是套接字。
WSAEOPNOTSUPP MSG_OOB 指定了,但是,套接字不是类型 SOCK_STREAM。
WSAESHUTDOWN 套接字已关闭;,在 ShutDown 调用具有 nHow 设置为0或2.后,调用套接字的 Receive 是不可能的。
WSAEWOULDBLOCK 套接字标记为未占用,并 Receive 操作将阻止。
WSAEMSGSIZE 中的数据进行太大而无法放入指定缓冲区和被截断。
WSAEINVAL 套接字尚未绑定与 Bind。
WSAECONNABORTED 虚拟电路中止的是由于超时或其他故障。
虚拟电路远程重置WSAECONNRESET。
备注
此功能可用于连接的流或数据进行套接字使用和用于读取访问数据。
对于类型 SOCK_STREAM套接字,尽可能多的信息与当前可用的至所提供的缓冲区的大小返回。 如果套接字为带外数据配置了(套接字选项 SO_OOBINLINE)的内联接收,并且带外数据是未阅读的,因此,只有带外数据将返回。 应用程序可以使用 IOCtlSIOCATMARK 选项或 OnOutOfBandData 确定带外数据是否仍然要读取。
对于数据进行套接字,数据将从第一个排队的数据进行中提取,到所提供的缓冲区的大小。 如果将数据进行大于所提供的缓冲区,缓冲区填充该表数据进行的第一部分,该多余数据丢失,并且,Receive 返回 SOCKET_ERROR 的值与错误代码的设置为 WSAEMSGSIZE。 如果输入数据不在套接字,SOCKET_ERROR 的值返回一个错误代码设置为 WSAEWOULDBLOCK。 OnReceive 回调函数来确定更多数据时到达。
如果套接字是类型 SOCK_STREAM,远程会正常关闭连接,Receive 将立即完成与0接收的字节。 如果重置连接,Receive 失败与该错误 WSAECONNRESET。
每次 CAsyncSocket::OnReceive 调用时,才应调用Receive。
示例
为 CAsyncSocket::OnReceive参见示例。
要求
Header: afxsock.h