请输入您要查询的百科知识:

 

词条 CAsyncSocket::Receive
释义

函数功能描述:本函数用于从套接字获取数据

CAsyncSocket::Receive

virtual int Receive(void* lpBuf,int nBufLen, int nFlags = 0 );

返回值

调用成功时,返回接收到的字节数。如果连接被关闭了,返回0;否则返回SOCKET_ERROR,可以调用GetLastError得到特定的错误代码。此成员函数可用的错误代码有:

1 WSANOTINITIALISED 调用本API函数之前必须成功执行了AfxsocketInit函数。

2 WSAENETDOWN Windows Sockets检测到网络系统故障。

3 WSAENOTCONN 套接字没有连接上。

4 WSAEINPROGRESS 正在进行成块的Windows Sockets操作。

5 WSAENOTSOCK 描述符不是一个套接字

6 WSAEOPNOTSUPP 设置了MSG_OOB,但是套接字的类型不是SOCK_ STREAM。

7 WSAESHUTDOWN 套接字已经被关闭。调用ShutDown(参数nHow的值设为0或2)后,就不能在该套接字上调用Receive了。

8 WSAEWOULDBLOCK 套接字标志为非成块,而Receive操作将产生成块。

9 WSAEMSGSIZE 数据报太大,不能完全放到缓冲中,将被截断。

10 WSAEINVAL 套接字没有用Bind绑定。

11 WSAECONNABORTED 由于超时或其它故障使虚电路异常退出。

12 WSAECONNRESET 远端重置了虚电路。

参数

lpBuf

输入数据的缓冲。

nBufLen

lpBuf的大小(字节数)。

nFlags

设置调用模式。本函数的语义由套接字选项和nFlags参数共同决定。nFlags由下面的任一个值组成,也可以用C++的OR操作符组合使用:

1 MSG_PEEK 把数据拷贝到缓冲,但不从输入队列上移走。

2 MSG_OOB 处理带外数据(请参阅联机文档“Win32 SDK”中的“Windows套接字编程注意事项")

说明

本函数用于从套接字获取数据。它从已连接的流套接字或数据报套接字上读输入的数据。

对于流套接字(SOCK_STREAM类型的套接字),本函数返回缓冲中不超过缓冲大小的所有有效数据。如果套接字被设置成在线接收带外数据(套接字选项为SO_OOBINLINE),并且带外数据没有被读,则仅仅返回带外数据。应用可以使用IOCtl的SIOCATMARK选项或者OnOutOfBandData来检测是否还有未读的带外数据。

对于数据报套接字,本函数从第一个入队的数据报中解出数据,发到缓冲中。如果数据报比缓冲大,则缓冲中仅包含数据报的前一部分,而丢弃其它的数据,Receive返回SOCKET_ERROR,错误代码设成WSAEMSGSIZE。如果套接字中没有输入数据,则返回SOCKET_ERROR,并把错误代码设为WSAEWOULD-BLOCK。当更多的数据到达时,可用回调函数OnReceive来检测。如果套接字是SOCK_STREAM类型的,并且远端接点已经正常地关闭连接,Receive会立即返回,接收的数据当然是0字节。如果连接被重置了,Receive将会异常返回,错误代码为WSAECONNRESET。

示例

参照CAsyncSocket::OnReceive.

请参阅

CAsyncSocket::AsyncSelect, CAsyncSocket::Create,CAsyncSocket::ReceiveFrom, CAsyncSocket::Send

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 19:01:47