CAsyncSocket::ReceiveFromEx

调用该成员函数接收数据figure和存储源点地址。SOCKADDR 结构或在 rSocketAddress (处理IPv6地址)。

int ReceiveFromEx(
   void* lpBuf,
   int nBufLen,
   CString& rSocketAddress,
   UINT& rSocketPort,
   int nFlags = 0 
);

参数

  • lpBuf
    输入数据的缓冲区。

  • nBufLen
    lpBuf 的字节长度。

  • rSocketAddress
    CString 接收到虚线的数字IP地址的对象。

  • rSocketPort
    对存储一个端口的 UINT

  • nFlags
    指定调用了的方式。套接字选项和参数 nFlags 依赖于此函数语义。后者将以下值中的任何一个构造与C++ OR 运算符:

    • 在详细介绍数据的MSG_PEEK 偷看。该数据复制到缓冲区,但从输入队列不会被取消。

    • MSG_OOB 处理带外数据。

返回值

如果未发生错误,ReceiveFromEx 返回接收到的字节数。如果连接已关闭,则返回0。否则,SOCKET_ERROR 的值返回,并且,特定错误代码可以通过调用 GetLastError检索。下面的错误适用于此成员函数:

  • WSANOTINITIALISED 的成功的 AfxSocketInit 必须在使用此API之前发生。

  • WSAENETDOWN Windows套接字实现检测网络子系统失败。

  • WSAEFAULTlpSockAddrLen 无效的参数: lpSockAddr 缓冲区因过小而无法满足对等类地址。

  • 块Windows套接字操作的WSAEINPROGRESS 的进度中。

  • WSAEINVAL 套接字尚未绑定与 Bind

  • WSAENOTCONN 套接字未连接(仅SOCK_STREAM )。

  • WSAENOTSOCK 描述符不是套接字。

  • WSAEOPNOTSUPP   MSG_OOB 指定了,但是,套接字不是类型 SOCK_STREAM

  • WSAESHUTDOWN 套接字已关闭;,在 ShutDown 调用具有 nHow 设置为0或2.后,调用套接字的 ReceiveFromEx 是不可能的。

  • WSAEWOULDBLOCK 套接字标记为未占用,并 ReceiveFromEx 操作将阻止。

  • WSAEMSGSIZE 中的数据进行太大而无法放入指定缓冲区和被截断。

  • WSAECONNABORTED 虚拟电路中止的是由于超时或其他故障。

  • 虚拟电路远程重置WSAECONNRESET

备注

此功能在(可能连接)套接字用于读取访问数据并获取该数据发送的地址。

此功能相同。CAsyncSocket::ReceiveFrom,但它处理IPv6地址以及更早的协议。

对于类型 SOCK_STREAM套接字,尽可能多的信息与当前可用的至所提供的缓冲区的大小返回。如果套接字为带外数据配置了(套接字选项 SO_OOBINLINE)的内联接收,并且带外数据是未阅读的,因此,只有带外数据将返回。应用程序可以使用 IOCtlSIOCATMARK 选项或 OnOutOfBandData 确定带外数据是否仍然要读取。lpSockAddr 和 lpSockAddrLen 参数。SOCK_STREAM 套接字被忽略。

对于数据进行套接字,数据将从第一个排队的数据进行中提取,到所提供的缓冲区的大小。如果将数据进行大于所提供的缓冲区,缓冲区填充消息的第一部分,该多余数据丢失,并且,ReceiveFromEx 返回 SOCKET_ERROR 的值与错误代码的设置为 WSAEMSGSIZE

如果 lpSockAddr 不为零,并且,套接字是类型 SOCK_DGRAM,将数据发送套接字的网络地址复制到相应的 SOCKADDR 结构。该值指向由 lpSockAddrLen 初始化该结构的大小和修改返回指示存储的地址的实际大小存在。如果输入数据不在套接字,ReceiveFromEx 调用等待数据到达,除非套接字是非阻塞。在这种情况下,SOCKET_ERROR 的值返回一个错误代码设置为 WSAEWOULDBLOCKOnReceive 回调来确定更多数据时到达。

如果套接字是类型 SOCK_STREAM,远程会正常关闭连接,ReceiveFromEx 将立即完成与0接收的字节。

要求

Header: afxsock.h

请参见

参考

CAsyncSocket选件类

层次结构图

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send