转载地址: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函数相关推荐

  1. Linux系统调用-- recv/recvfrom/recvmsg函数详解(转)

    Linux系统调用-- recv/recvfrom/recvmsg函数详解 2007-09-10 23:37 [recv/recvfrom/recvmsg系统调用]   功能描述: 从套接字上接收一个 ...

  2. recv, recvfrom, recvmsg

    recv,recvfrom,recvmsg函数用于从套接字接收信息. ssize_t recv (int s, void *buf, size_t len, int flags); ssize_t r ...

  3. C语言 recv()函数、recvfrom()函数、recvmsg()函数

    文章目录 man man RECV(2) Linux Programmer's Manual RECV(2)NAMErecv, recvfrom, recvmsg - receive a messag ...

  4. linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解

    Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...

  5. linux内核 recvfrom,Linux系统调用-- recv/recvfrom 函数详解

    Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...

  6. sendmsg recvmsg函数

    sendmsg(2)与recvmsg(2)函数 这些函数为程序提供了一些其他的套接口I/O接口所不具备的高级特性.下面的内容我们将会先来看一下sendmsg来介绍这些主题.然后将会完整的介绍recvm ...

  7. send()函数recv()函数详解

    目录 1.        send()函数 2.        recv()函数 1.        send()函数 函数原型:ssize_t send(int sockfd, const void ...

  8. Linux内核分析:recv、recvfrom、recvmsg函数实现

    先看一下这三个函数的声明: 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 ssize_t recv(int sock ...

  9. TCP通信常用的send,sendto,recv,recvfrom函数详解

    send函数 int send( SOCKET s,    const char FAR *buf,    int len,    int flags ); 不论是客户还是服务器应用程序都用send函 ...

最新文章

  1. 谷歌如何评估产品经理?
  2. 在sitecopy中设置不支持passive模式的ftp服务器
  3. 阿里云服务器win2003系统配置IIS+php+mysql+phpmyadmin+zend 500
  4. 中间件是什么?在.NET Core中的工作原理又是怎样的呢?
  5. 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
  6. 关于Jenkins找不到依赖Jar包问题
  7. congestion基本概念
  8. HDU2040 亲和数【水题】
  9. 回文数判断python五位数_Python【习题】回文数:判断一个数是否是回文数
  10. JAVA并发编程实践 下载
  11. 同一局域网入侵_局域网IP地址冲突、环路?千兆接入交换机选型很重要
  12. 鸿蒙系统能玩魔兽世界吗,魔兽世界TBC燃烧远征测试服,H英雄本的装备2小时内可以交易, 亲友们可以互相毛装备了...
  13. 身份证号码校验算法(附Python代码)
  14. android 触摸屏干扰,一种电容触摸屏的抗干扰方法及其控制模块与流程
  15. Windows系统 电脑系统重装详细图文教程(绝对够详细,看这一篇就够)
  16. python 下载视频文件_python 实现视频流下载保存MP4的方法
  17. 深度学习框架之争:TensorFlow退守工业界,PyTorch主导学术界?
  18. Sklearn官方文档中文整理10——等式回归和神经网络模型(有监督)篇
  19. asyne和await
  20. 个体工商户核名查询_个体工商户网上注册流程

热门文章

  1. Spring手动回滚事务
  2. Megastore:为交互式服务提供可扩展的高可用性存储
  3. 关于星空的java小程序_[Java教程]小程序使用Canvas画饼图_星空网
  4. nextcloud icon_吉利ICON,我信任的好伙伴,感谢有你的陪伴
  5. php 内置mail 包,配置php自带的mail功能
  6. python online course_python-选课系统
  7. c语言素数个数_C语言试题及答案
  8. txt文本改html没有用,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手...
  9. python 2x可以打么_15分钟让你了解Python套路,看你能不能坚持的住
  10. php对字符串进行编码,PHP如何使用convert_uuencode()函数对字符串进行编码?