Linux系统调用-- recv/recvfrom函数详解

功能描述:

从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。

如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。

假如套接字上没有消息可以读取,除了套接字已被设置为非阻塞模式,否则接收调用会等待消息的到来。

用法:

#include

#include

ssize_t recv(int sock, void *buf, size_t

len, int flags);

ssize_t recvfrom(int sock, void *buf,

size_t len, int flags,

struct sockaddr *from, socklen_t *fromlen);

参数:

sock:索引将要从其接收数据的套接字。

buf:存放消息接收后的缓冲区。

len:buf所指缓冲区的容量。

flags:是以下一个或者多个标志的组合体,可通过or操作连在一起

MSG_DONTWAIT:操作不会被阻塞。

MSG_ERRQUEUE:指示应该从套接字的错误队列上接收错误值,依据不同的协议,错误值以某种辅佐性消息的方式传递进来,使用者应该提供足够大的缓冲区。导致错误的原封包通过msg_iovec作为一般的数据来传递。导致错误的数据报原目标地址作为msg_name被提供。错误以sock_extended_err结构形态被使用,定义如下

#define SO_EE_ORIGIN_NONE0

#define SO_EE_ORIGIN_LOCAL1

#define SO_EE_ORIGIN_ICMP2

#define SO_EE_ORIGIN_ICMP63

struct sock_extended_err

{

u_int32_t ee_errno;/* error number */

u_int8_t ee_origin;

/* where the error originated */

u_int8_t ee_type;/* type */

u_int8_t ee_code;/* code */

u_int8_t ee_pad;

u_int32_t

ee_info;/* additional information */

u_int32_t ee_data;/* other

data */

/* More data may follow */

};

MSG_PEEK:指示数据接收后,在接收队列中保留原数据,不将其删除,随后的读操作还可以接收相同的数据。

MSG_TRUNC:返回封包的实际长度,即使它比所提供的缓冲区更长, 只对packet套接字有效。

MSG_WAITALL:要求阻塞操作,直到请求得到完整的满足。然而,如果捕捉到信号,错误或者连接断开发生,或者下次被接收的数据类型不同,仍会返回少于请求量的数据。

MSG_EOR:指示记录的结束,返回的数据完成一个记录。

MSG_TRUNC:指明数据报尾部数据已被丢弃,因为它比所提供的缓冲区需要更多的空间。

MSG_CTRUNC:指明由于缓冲区空间不足,一些控制数据已被丢弃。

MSG_OOB:指示接收到out-of-band数据(即需要优先处理的数据)。

MSG_ERRQUEUE:指示除了来自套接字错误队列的错误外,没有接收到其它数据。

from:指向存放对端地址的区域,如果为NULL,不储存对端地址。

fromlen:作为入口参数,指向存放表示from最大容量的内存单元。作为出口参数,指向存放表示from实际长度的内存单元。

返回说明:

成功执行时,返回接收到的字节数。另一端已关闭则返回0。失败返回-1,errno被设为以下的某个值

EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时

EBADF:sock不是有效的描述词

ECONNREFUSE:远程主机阻绝网络连接

EFAULT:内存空间访问出错

EINTR:操作被信号中断

EINVAL:参数无效

ENOMEM:内存不足

ENOTCONN:与面向连接关联的套接字尚未被连接上

ENOTSOCK:sock索引的不是套接字

linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解相关推荐

  1. linux中用zip压缩文件,详解Linux中zip压缩和unzip解压缩命令及使用详解

    下面给大家介绍下Linux中zip压缩和unzip解压缩命令详解 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩myda ...

  2. linux命令wget的url路径太长,Linux中WGET下载https链接及WGET命令的详解

    Linux中WGET下载https链接及WGET命令的详解 使用如下的命令下载https链接: ```bash wget -r -np -nd --accept=gz --no-check-certi ...

  3. linux mv复制命令,linux中删除复制移动文件rm,mv,cp命令详解linux操作系统 -电脑资料...

    在linux中对文件的复制删除移动分别会使用到rm,mv,cp三个命令,下面我来给大家介绍一下rm,mv,cp命令对文件的常规操作吧, 先看实例 删除复制移动文件命令 Linux代码 rm -rf / ...

  4. linux中etc下的hosts(本地IP解析)文件详解

    linux中etc下的hosts(本地IP解析)文件详解 1./etc/hosts(本地解析) 很多人一提到更改hostname首先就想到修改/etc/hosts文件, 认为hostname的配置文件 ...

  5. linux复制文件scp命令,Linux 中的文件复制cp命令和scp命令详解

    Linux 中的文件复制cp命令和scp命令详解 在使用操作系统的使用过程中,常常需要复制文件到本地或者传输文件到其他电脑上,这时候用到两个命令cp和scp. cp命令用来复制文件或者目录.scp是s ...

  6. php中get_featured_posts()是什么意思,WordPress的Get_Posts()函数详解

    WP中获取POST有两个主要函数,Get_post()和Get_Posts().一个是获取单文章,另外一个是获取多文章,其中,官网对Get_posts()函数的描述很简单.但有的时候描述越简单的函数, ...

  7. linux中磁盘分区fdisk,管理磁盘分区之fdisk详解

    Mozatr的不定期更新,处于学习阶段的Mozart,愿不断分享,不断进步. 此次分享一个重要的管理分区命令:fdisk ,我们一一阐述. (一)分区 首先我们了解下什么是分区,分区是将一个硬盘驱动器 ...

  8. 在linux下给编辑文件在哪里设置密码,Linux中利用Vim对文件进行密码保护的方法详解...

    前言 Vim 是一种流行的.功能丰富的和高度可扩展的 Linux 文本编辑器,它的一个特殊功能便是支持用带密码各种的加密方法来加密文本文件. 本文中,我们将向你介绍一种简单的 Vim 使用技巧:在 L ...

  9. Linux中samba共享服务的部署及安全优化详解

    samba共享服务的部署及安全优化 文章目录 samba共享服务的部署及安全优化 1.samba服务简介 2.samba基本信息 3.samba的安装与启用 a)windows下文件系统的共享 b)L ...

最新文章

  1. Windows Azure Cloud Service (19) 动态指定WCF的发布地址
  2. iOS 中二维码扫描
  3. Linux的Nginx一:概况
  4. C语言描述栈的实现及操作(数组实现)
  5. 关于redis的db的使用几号db的问题
  6. celery 停止_celery 停止执行中 task
  7. Linux经典书籍推荐-转
  8. asp.net core 系列 17 通用主机 IHostBuilder
  9. [转载] python单词词典_Python 字典(Dictionary)
  10. Linux(CentOS7)虚拟机安装详解
  11. 错过了蓝月亮,你还有我们~~只此一次!
  12. C++循环控制经典例题*
  13. NEWSCTF第二届--官方wp(2021.6.1萌新赛)
  14. 大神级ppt作品欣赏_超写实绘画,逼真到让你怀疑自己的双眼,各路超写实大神作品欣赏...
  15. 制作一个电影分享网站的微信公众号
  16. 南非认证_现在...南非
  17. php编写当前日期距高考天数,距离2021年高考天数 2021高考倒计时
  18. chmod命令用法(linux中chmod命令用法)
  19. 英语语法最终珍藏版笔记-10动名词
  20. 登出(logout.jsp) - Cookie清除无效问题

热门文章

  1. Day121.ElasticSearch:概述、安装、基本操作、DSL高级查询
  2. 计算机数据恢复教程视频,电脑磁盘上的视频误删如何恢复?误删视频恢复
  3. springboot毕设项目网上点餐系统z5055(java+VUE+Mybatis+Maven+Mysql)
  4. CALL和RET指令
  5. 2022高教社杯数学建模国赛C题思路代码实现
  6. 电脑屏幕录制怎么弄?电脑上怎么录制屏幕, 3个实用方法
  7. python实现 html表格转Dataframe html2text把请求到的html转化为markdown markdown表格转dataframe
  8. 中文用户名php正则检测,PHP用户名中文汉字正则验证
  9. 多屏互动方案 android,智慧教室多屏互动教学方案
  10. 智能汽车「博弈」供应链