recv、recvfrom[通俗易懂]

recv、recvfrom[通俗易懂]1、recvfrom()接收一个数据报并保存源地址。(这里是windows中的头文件,Linux的用法在下面的那个实例)头文件:#include  #includeintrecvfrom(ints,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);s:标

大家好,又见面了,我是你们的朋友全栈君。

1、recvfrom()
接收一个数据报并保存源地址。(这里是windows中的头文件,Linux的用法在下面的那个实例)
头文件:#include <sys/types.h>   #include <sys/socket.h>
int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from,int *fromlen);
s:标识一个已连接
套接口的描述字。
buf:接收
数据缓冲区
len:
缓冲区长度。
flags:调用操作方式。
from:(可选)
指针,指向装有源地址的缓冲区。
fromlen:(可选)指针,指向from缓冲区长度值。

2、recv()
头文件:#include <sys/types.h>   #include <sys/socket.h>


定义函数:int recv(int s, void *buf, int len, unsigned int flags);




函数说明:recv()用来接收远端主机经指定的socket 传来的数据, 并把数据存到由参数buf 指向的内存空间, 参数len 为可接收数据的最大长度.




参数 flags 一般设0. 其他数值定义如下:


1、MSG_OOB 接收以out-of-band 送出的数据.


2、MSG_PEEK 返回来的数据并不会在系统内删除, 如果再调用recv()会返回相同的数据内容.


3、MSG_WAITALL 强迫接收到len 大小的数据后才能返回, 除非有错误或信号产生.


4、MSG_NOSIGNAL 此操作不愿被SIGPIPE 信号中断返回值成功则返回接收到的字符数, 失败返回-1,错误原因存于errno 中.




错误代码:
   EBADF 参数s 非合法的socket 处理代码
   EFAULT 参数中有一指针指向无法存取的内存空间
   ENOTSOCK 参数s 为一文件描述词, 非socket.
   EINTR 被信号所中断
   EAGAIN 此动作会令进程阻断, 但参数s 的socket 为不可阻断
   ENOBUFS 系统的缓冲内存不足.
   ENOMEM 核心内存不足
   EINVAL 传给系统调用的参数不正确.




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163451.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月23日 下午5:16
下一篇 2022年7月23日 下午5:36


相关推荐

  • 禁止计算机更新,彻底禁止win10自动更新方法

    禁止计算机更新,彻底禁止win10自动更新方法现在基本每个小伙伴都用上Windows10的电脑,Windows10每隔一段时间会进行更新补丁,这个时候显得格外烦恼,很多用户都想要关掉,借助一些小工具来实现,但往往会发现,自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让用户非常不爽,win10关闭自动更新已经成为众多用户的难题,所以很多用户来问我怎么才可以把win10永久关闭自动更新,接下来,我就给大家介绍彻底禁止win10自动更…

    2022年5月4日
    82
  • Java + Ajax跨域解决方案整理

    Java + Ajax跨域解决方案整理为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。产生跨域的情况有:1.域名不同,端口也不同;2.域名相同但是端口不同;3.域名不同,端口相同。解决方案:一、JSONP方式1.只支持get方法,不支持postfang方法;使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。二、使用springMVC架构的,使用版本4.2以上…

    2022年8月24日
    7
  • 华为太极magisk安装教程_教程:如何升级太极内部的应用

    华为太极magisk安装教程_教程:如何升级太极内部的应用使用过太极的小伙伴都知道,要把应用添加到太极(magisk版除外)中是个麻烦事儿:首先得花费大量的时间来创建应用,然后还必须卸载原来的应用,安装完毕之后又要花很长的时间来优化。如果待创建的应用安装包比较大并且你手机的CPU不在工作状态,那这个流程就不是一般的长了。这时候就有童鞋会问了,如果我在太极里面创建的应用要升级了怎么办?是不是每次升级都需要卸载原应用?实际上,在太极内部升级应用…

    2022年6月3日
    165
  • java三目运算符判断boonlean,java三元运算符

    java三目运算符判断boonlean,java三元运算符首先看一下三元运算符的格式 条件语句 表达式 1 表达式 2 其中如条件语句为真执行表达式 1 否则执行表达式 2 简单的例子就不举了 来点其它的 在 JDK1 5 以前的版本中 表达式 1 和表达式 2 都要求是相同的类型 比如都是 String 或者 char 之类的 在 JDK1 5 以后 有了自动拆箱和装箱的原因 两者只要其中一种或者两者都能被拆箱即可 比如表达式 1 为 Integer 而表达式 2 为 int 类型

    2026年3月26日
    2
  • 登顶全球榜首!月之暗面发布新款万亿参数开源大模型 K2

    登顶全球榜首!月之暗面发布新款万亿参数开源大模型 K2

    2026年3月12日
    2
  • 宝塔卸载命令_linux如何永久停用mysql

    宝塔卸载命令_linux如何永久停用mysql宝塔面板(linux)卸载方法及卸载后文件删除我们说过很多宝塔面板的教程,貌似没说过如何卸载宝塔面板,假如我们装置一款面板,都会请求要洁净纯洁的系统,就是说,假如你装置过环境可能会招致装置不胜利。宝塔面板能够装置,当然也能够卸载,官方也给出了卸载脚本,今天把这些办法罗列下写在这里。一:脚本卸载你需要先在面板中将通过面板安装的所有软件卸载,如nginx、mysql、php等等,然后,进入SSH…

    2025年9月18日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号