recv、recvfrom、recvmsg函数
转载地址:https://blog.csdn.net/jiahehao/article/details/8858131
1. recv
#include <sys/socket.h>
ssize_t recv(int sockfd, void * buf, size_t nbytes, int flags);
返回值:已字节计数的消息长度,若无可用消息或者对方已经按序结束则返回0,出错返回-1
flag有以下值:
MSG_OOB: 如果协议支持,接收带外数据
MSG_PEER: 返回报文内容而不是真正取走报文
MSG_TRUNC: 即使报文被截断,要求返回的是报文的实际长度
MSG_MAITALL: 等待直到所有数据可用(仅支持SOCK_STREAM)
对于SOCK_STREAM套接字,接收的数据可以比请求的少,标志MSG_WAITALL可以阻止这种行文,除非所需数据全部收到,recv函数才返回。对于SOCK_DGRAM和SOCK_SEQPACKET套接字,MSG_WAITALL标志没有什么影响,因为这些基于报文的套接字类型一次读取就返回整个报文。
如果发送者已经调用了shutdown来结束传输,或者网络协议支持默认的顺序关闭且发送端已经关闭,那么所有的数据接收完毕后,recv返回0。
2. recvform
如果要定位数据发送者,可以使用recvfrom来得到数据发送者的源地址
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, //套接字
void * buf, //接收数据缓冲区
size_t len, //接收数据长度
int flags, //标志
struct sockaddr * addr, //数据发送者地址,函数调用后该地址结构被填充
socklen_t * addrlen //地址长度指针(注意这里是个指针)
);
返回值:以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,出错返回-1.
如果addr非空,他将包含数据发送者的套接字地址,当调用recvfrom时,需要设置addrlen参数指向一个包含addr所指套接字缓冲区字节大小的整数。返回时,该整数设为该地址的实际字节大小。
因为可以获得发送者的地址,recvfrom通常用于无连接套接字。否则recvfrom等同于recv。
3. recvmsg
recvmsg将接收到的数据送入多个缓冲区,或者想接收辅助数据
#include <sys/socket.h>
ssize_t recvmsg(int sockfd, struct msghdr * msg, int flag);
返回值:以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,出错返回-1.
结构msghdr被recvfrom用于指定接收数据的输入缓冲区。可以设置参数flags来改变recvfrom的默认行文。
recv、recvfrom、recvmsg函数相关推荐
- Linux系统调用-- recv/recvfrom/recvmsg函数详解(转)
Linux系统调用-- recv/recvfrom/recvmsg函数详解 2007-09-10 23:37 [recv/recvfrom/recvmsg系统调用] 功能描述: 从套接字上接收一个 ...
- recv, recvfrom, recvmsg
recv,recvfrom,recvmsg函数用于从套接字接收信息. ssize_t recv (int s, void *buf, size_t len, int flags); ssize_t r ...
- C语言 recv()函数、recvfrom()函数、recvmsg()函数
文章目录 man man RECV(2) Linux Programmer's Manual RECV(2)NAMErecv, recvfrom, recvmsg - receive a messag ...
- linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- linux内核 recvfrom,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- sendmsg recvmsg函数
sendmsg(2)与recvmsg(2)函数 这些函数为程序提供了一些其他的套接口I/O接口所不具备的高级特性.下面的内容我们将会先来看一下sendmsg来介绍这些主题.然后将会完整的介绍recvm ...
- send()函数recv()函数详解
目录 1. send()函数 2. recv()函数 1. send()函数 函数原型:ssize_t send(int sockfd, const void ...
- Linux内核分析:recv、recvfrom、recvmsg函数实现
先看一下这三个函数的声明: 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 ssize_t recv(int sock ...
- TCP通信常用的send,sendto,recv,recvfrom函数详解
send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函 ...
最新文章
- 谷歌如何评估产品经理?
- 在sitecopy中设置不支持passive模式的ftp服务器
- 阿里云服务器win2003系统配置IIS+php+mysql+phpmyadmin+zend 500
- 中间件是什么?在.NET Core中的工作原理又是怎样的呢?
- 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
- 关于Jenkins找不到依赖Jar包问题
- congestion基本概念
- HDU2040 亲和数【水题】
- 回文数判断python五位数_Python【习题】回文数:判断一个数是否是回文数
- JAVA并发编程实践 下载
- 同一局域网入侵_局域网IP地址冲突、环路?千兆接入交换机选型很重要
- 鸿蒙系统能玩魔兽世界吗,魔兽世界TBC燃烧远征测试服,H英雄本的装备2小时内可以交易, 亲友们可以互相毛装备了...
- 身份证号码校验算法(附Python代码)
- android 触摸屏干扰,一种电容触摸屏的抗干扰方法及其控制模块与流程
- Windows系统 电脑系统重装详细图文教程(绝对够详细,看这一篇就够)
- python 下载视频文件_python 实现视频流下载保存MP4的方法
- 深度学习框架之争:TensorFlow退守工业界,PyTorch主导学术界?
- Sklearn官方文档中文整理10——等式回归和神经网络模型(有监督)篇
- asyne和await
- 个体工商户核名查询_个体工商户网上注册流程
热门文章
- Spring手动回滚事务
- Megastore:为交互式服务提供可扩展的高可用性存储
- 关于星空的java小程序_[Java教程]小程序使用Canvas画饼图_星空网
- nextcloud icon_吉利ICON,我信任的好伙伴,感谢有你的陪伴
- php 内置mail 包,配置php自带的mail功能
- python online course_python-选课系统
- c语言素数个数_C语言试题及答案
- txt文本改html没有用,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手...
- python 2x可以打么_15分钟让你了解Python套路,看你能不能坚持的住
- php对字符串进行编码,PHP如何使用convert_uuencode()函数对字符串进行编码?