CAsyncSocket::Receive

王朝百科·作者佚名  2011-03-16  
宽屏版  字体:   |    |    |  超大  

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

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

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有