12.物联网LWIP之消息处理机制,lwip消息传递机制

news2024/12/23 6:05:49

一。LWIP数据包消息处理

1.接受数据包

2.构造消息

3.投递消息

4.获取消息

5.处理数据包

api_msg

这个结构体包括执行函数所必需的一切,对于另一个线程上下文中的netconn(主要用于处理netconn)在tcpip_thread上下文中(线程安全)。

struct api_msg {
  /* 大家可以理解为是一个socket,这个接口要表示很多信息,用一个结构体进行封装 */
  struct netconn *conn;
  /** 消息处理函数的返回值 */
  err_t err;
  /** Depending on the executed function, one of these union members is used */
  union {
    /** 用于网络数据发送 ---- write */
    struct netbuf *b;
    /** 相当于sockket */
    struct {
      u8_t proto;
    } n;
    /** 
    
        bind
        connect
    */
    struct {
      API_MSG_M_DEF_C(ip_addr_t, ipaddr);
      u16_t port;
    } bc;
    /** 获取IP地址,acpect,会返回我们客户端的IP地址以及端口号*/
    struct {
      ip_addr_t API_MSG_M_DEF(ipaddr);
      u16_t API_MSG_M_DEF(port);
      u8_t local;
    } ad;
    /** write */
    struct {
      const void *dataptr;
      size_t len;
      u8_t apiflags;
#if LWIP_SO_SNDTIMEO
      u32_t time_started;
#endif /* LWIP_SO_SNDTIMEO */
    } w;
    /** read*/
    struct {
      u32_t len;
    } r;
#if LWIP_TCP
    /** 
        close
        shutdown
    */
    struct {
      u8_t shut;
#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER
      u32_t time_started;
#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
      u8_t polls_left;
#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
    } sd;
#endif /* LWIP_TCP */
#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)
    /** IGMP */
    struct {
      API_MSG_M_DEF_C(ip_addr_t, multiaddr);
      API_MSG_M_DEF_C(ip_addr_t, netif_addr);
      enum netconn_igmp join_or_leave;
    } jl;
#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */
// listen(fd, 5)
#if TCP_LISTEN_BACKLOG
    struct {
      u8_t backlog;
    } lb;
#endif /* TCP_LISTEN_BACKLOG */
  } msg;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/950358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm学生信息管理系统源码和论文

ssm学生信息管理系统源码和论文075 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 传统办法管理学生信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行…

多目标应用:基于多目标向日葵优化算法(MOSFO)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标向日葵优化算法 多目标向日葵优化算法(Multi-objective sunflower optimization,MOS…

企业网络安全:威胁检测和响应 (TDR)

什么是威胁检测和响应 威胁检测和响应(TDR)是指识别和消除 IT 基础架构中存在的恶意威胁的过程。它涉及主动监控、分析和操作,以降低风险并防止未经授权的访问、恶意活动和数据泄露,以免它们对组织的网络造成任何潜在损害。威胁检…

新开通的抖店没有销量和体验分,如何找达人带货起店?教程如下

我是王路飞。 做抖店,想要快速起店,无非就是做动销,或者货损。 但是动销比较有风险,货损的话,一个是新手不会具体的操作和设置,一个是自己利润受损。 所以今天给你们说下,新开通的抖店在没有…

Java EE 突击 15 - Spring Boot 统一功能处理

Spring Boot 统一功能处理 一 . 统一功能的处理1.1 初级阶段 : 不断重复1.2 中级阶段 : 集成方法1.3 高级阶段 : Spring AOP1.4 超高级阶段 : Spring 拦截器准备工作实现拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理扩展 : 统一访问前缀添加 二 . 统一异常的…

机器学习的第一节基本概念的相关学习

目录 1.1 决策树的概念 1.2 KNN的概念 1.2.1KNN的基本原理 1.2.2 流程: 1.2.3 优缺点 1.3 深度学习 1.4 梯度下降 损失函数 1.5 特征与特征选择 特征选择的目的 1.6 python中dot函数总结 一维数组的点积: 二维数组(矩阵)的乘法&am…

结构体对齐原理及在STM32中的设计原则和实现

在嵌入式系统开发中,结构体作为一种常见的数据组织方式,在内存中的布局方式对于程序性能和内存占用具有重要影响。本文将深入探讨单片机C语言中的结构体对齐原理、重要性以及不同的对齐方式,并通过示例演示结构体对齐如何影响内存占用、访问性…

SpringBoot:一个注解就能帮你下载任意对象

一 前言 下载功能应该是比较常见的功能了,虽然一个项目里面可能出现的不多,但是基本上每个项目都会有,而且有些下载功能其实还是比较繁杂的,倒不是难,而是麻烦。 如果我说现在只需要一个注解就能帮你下载任意的对象&…

纪念我的第一个稍微有用一点的python代码的成功——利用最近邻插值法实现图像的放大

一、技术来源: 插值算法 | 最近邻插值法_哔哩哔哩_bilibili 感谢这位的技术分享,讲解得通俗易懂 二、一些磕磕绊绊: 1.首先,pycharm的使用,通过file创建一个新的项目(最好可以记住文件路径&am…

Java9-17新特性

文章目录 一、简介二、新特性接口私有方法(JDK9)String存储结构的变化(JDK9)快速创建只读集合(JDK9、10)文本块(JDK13、14、15)更直观的 NullPointerException 提示(JDK1…

exe软件监控看门狗使用说明

作为物联网数据采集解决方案专业提供商,数采物联网 小编daq-iot在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。 1.软件概述 本软件功能用途:监控电脑或服务器exe程序运行,在exe程序由于异常或其他原因退出后,自动启动exe程序&#xff0…

goroutine的一点东西

前面的两篇,从相对比较简单的锁的内容入手(也是干货满满),开始了go的系列。这篇开始,进入更核心的内容。我们知道,go应该是第一门在语言层面支持协程的编程语言(可能是我孤陋寡闻),goroutine也完全算的上是go的门面。g…

文件属性查看和修改学习

这个是链接,相当于快捷方式,指向usr/bin这个目录,链接到这个目录

NRF52832一主多从ble_app_multilink_central

下载官方SDK后打开路径:nRF5SDK153059ac345\nRF5_SDK_15.3.0_59ac345\examples\ble_central\ble_app_multilink_central\pca10040\s132\arm5_no_packs 下的工程文件,确定把log开启 编译后下载完程序(要下载协议栈,这里用6.1.1的)&#xff0c…

FPGA原理与结构——时钟IP核原理学习

一、前言 在之前的文章中,我们介绍了FPGA的时钟结构 FPGA原理与结构——时钟资源https://blog.csdn.net/apple_53311083/article/details/132307564?spm1001.2014.3001.5502 在本文中我们将学习xilinx系列的FPGA所提供的时钟IP核,来帮助我们进一…

实现带头双向循环链表

🌈带头双向循环链表 描述:一个节点内包含两个指针,一个指向上一个节点,另一个指向下一个节点。哨兵位指向的下一个节点为头节点,哨兵位的上一个指向尾节点。 结构优势:高效率找尾节点;高效率插入…

RabbitMQ工作模式-主题模式

主题模式 官方文档参考:https://www.rabbitmq.com/tutorials/tutorial-five-python.html 使用topic类型的交换器,队列绑定到交换器、bingingKey时使用通配符,交换器将消息路由转发到具体队列时,会根据消息routingKey模糊匹配&am…

[学习笔记] fhq Treap 平衡树

fhq Treap 也叫无旋Treap (好像?我也不知道) 反正我带旋 Treap 是不会滴,其他的平衡树也不会(但是会平板电视) fhq Treap 好写,码量小,缺点是常数比较大 定义 二叉搜索树 二叉搜…

为什么说模电难学?因为它至少是这27个基础知识的排列组合!

1、基尔1、基尔霍夫定理的内容是什么? 基尔霍夫电流定律:在电路任一节点,流入、流出该节点电流的代数和为零。 基尔霍夫电压定律:在电路中的任一闭合电路,电压的代数和为零。 2、戴维南定理 一个含独立源、线性电阻…

在抖音开店卖货的流程是什么?最全解答如下,建议新手认真看完!

我是王路飞。 同样是在抖音卖货,为何如今大多数人都是选择在抖音开店,而不再是选择做账号、开直播了呢? 原因很简单,因为门槛和变现方式。 相比短视频和直播带货的起号、变现难度越来越大,低门槛的抖音小店显然更适…