recv函数

来源:互联网 发布:mac 可视化ssh 编辑:程序博客网 时间:2024/05/08 05:38

The Windows Sockets recv function receives data from a connected socket.

int recv (SOCKET s, char FAR* buf, int len,int flags );

Parameters 参数

s        [in]     A descriptor identifying a connected socket.            socket连接字
buf     [out]   A buffer for the incoming data.                                 收数据包缓冲区
len     [in]    The length ofbuf.                                                       缓冲的长度
flags  [in]     A flag specifying the way in which the call is made. 接收方式

 

 

 

       recv函数用来读取面向连接的,和无连接的套接字发送过来的数据.当使用一个面向连接的协议,套接字必需先建立连接,当使用一个无连接的协议,套接字必需先绑定. 

       本地套接字的地址必需知道.对于服务器程序,使用显式的绑定函数或者隐式的accept或者WSAAccept接收函数,显式的绑定不适用于客户端程序.对于客户端程序套接字可以变成隐式的绑定到本地的一个地址通过使用connect,WSAConnect,sendto WSASendTo,或者WSAJoinLeaf函数.

         对于面向连接的或者无连接的套接字,这个函数限定连接被接受的地址.这个函数只返回连接中的远程地址返回的信息.其它连接返回的信息是不显示的.

       对于面向连接的socket(例如流式),调用recv函数将返回缓冲区能容纳的尽可能最多的信息。如果socket配置了带外数据(选项SO_OOBINLINE),并且带外数据还没有读取,那么将只返回带外数据。应用程序可以使用ioctlsocket或者WSAIoctl SIOCATMARK 方法去获取是否还有带外数据等待读取。

       对于无连接的sockets管道(例如报文格式或者其他基于消息的sockets),获取数据的方式是通过从connect函数描述的目标地址获得的第一个报文(消息)

       如果报文或者消息大于接受缓冲区,缓冲区将被报文的第一部分填充,recv函数返回WSAEMSGSIZE错误,对于不可信协议(例如,UDP)升序的数据会丢失,对于可信协议,数据将被服务提供者保留直到提供一个足够大的缓冲区 使用recv函数读取。对于TCP/IP协议,一个应用程序不能接收任何多播地址的数据包,除非他本身成为多播地址的一员。

       如果没有数据在socket,当WSARecv方法没有设置的MSG_PARTIAL标志,recv函数会阻塞等待数据取,除非socket不是阻塞的。在这种情况下(非阻塞模式),将返回SOCKET_ERROR,调用WSAGetLastError将返回.对于, , or  函数可以用来获取何时将有数据到达。

 

Return Values

If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling .

 

QuickInfo

  Windows NT: Yes
  Windows: Yes
  Windows CE: Use version 1.0 and later.
  Header: Declared in winsock2.h.
  Import Library: Link with ws2_32.lib.

 

 

 

 

 

 

原创粉丝点击