17.4.1 数据接收函数recv

来源:互联网 发布:java打包成jar供调用 编辑:程序博客网 时间:2024/05/21 09:49

  • 摘要:《Linux系统下C程序开发详解》第17章讲述的是面向连接的套接字通信,这种信息传输方式是网络中最常用最重要的信息传输方式,本节为您介绍的是数据接收函数recv。
  • 标签:Linux  C程序  开发  函数recv  Linux系统下C程序开发详解

 

17.4  数据的发送与接收

建立套接字并完成网络连接以后,可以把信息传送到远程主机上,这个过程就是信息的发送。对于远程主机发送来的信息,本地主机需要进行接收处理。本节将讲述这种面向连接的套接字信息发送与接收操作。

17.4.1  数据接收函数recv

函数recv可以接收远程主机发送来的数据,并把这些数据保存到一个数组中。该函数的使用方法如下所示。

int recv(int s,void *buf,int len,unsigned int flags);


在参数列表中,s表示已经建立的socket,buf是一个指针,指向一个数组,接收到的数据会保存到这个数组上,len表示数组的长度,可以用sizeof函数来取得,flags一般设置为0,其他可能的赋值与含义如下所示。

MSG_OOB:接收以out-of-band送出的数据。

MSG_PEEK:返回来的数据并不会在系统内删除,如果再调用recv时会返回相同的数据内容。

MSG_WAITALL:强迫接收到len大小的数据后才能返回,除非有错误或信号产生。
 
MSG_NOSIGNAL:此操作被SIGPIPE信号中断。

recv函数如果接收到数据,会把这些数据保存在buf指针指向的内存中,然后返回接收到字符的个数。如果发生错误则会返回-1。函数可能发生
下面这些错误,可以用errno来捕获错误。

EBADF:参数s不是一个合法的socket。
 
EFAULT:参数中的指针指向了无法读取的内存空间。
 
ENOTSOCK:参数s是文件描述词,而不是一个socket。
 
EINTR:被信号中断。
 
EAGAIN:此动作会阻断进程,但参数s的socket不可阻断。
 
ENOBUFS:系统的缓冲内存不足。
 
ENOMEM:核心内存不足
 
EINVAL:参数不正确。

在使用这个函数前,需要在程序的最前面包含下面的头文件。

 #include <sys/types.h>
#include <sys/socket.h>

回书目   上一节   下一节

http://book.51cto.com/art/200806/75684.htm

原文链接:

原创粉丝点击