zoukankan      html  css  js  c++  java
  • lwip netbuf

    lwip2.0.2

    netbuf_new——分配netbuf结构体的内存。

    netbuf_alloc,分配netbuf中pbuf内存(pbuf_alloc中PBUF_RAM类型,包括pbuf结构体和payload区),如果使用nefbuf_ref的话,则不需要此步

    netbuf_ref,分配netbuf中pbuf内存(pbuf_alloc中PBUF_REF类型,包括pbuf结构体,无payload区)

    netbuf_free,调用的是pbuf_free

    netbuf_delete,删除nef_buf结构体

    使用方法:

    接收过程————

      定义netbuf指针,netbuf结构体协议栈会分配(没找到在哪儿分配的?见后面分析),包括pbuf和netbuf结构体

      接收函数会获取协议栈分配的netbuf指针——netconn_recv(conn, &buf);  

      获取数据和长度——netbuf_data(bufrx, (void *)&drcv, &dlen);  !!!netbuf有可能有好几个,可能需要遍历。

      释放netbuf结构体(同时释放netbuf结构体和pbuf内存)——netbuf_delete(bufrx);

    发送过程————

      ——已有数据,datasend[100]

        定义netbuf指针(能否直接定义netbuf变量?)——struct netbuf *buf;

        申请netbuf结构体——buf = netbuf_new();

        引用待发送的数据——netbuf_ref(buf, datasend, 20);

        发送数据——netconn_sendto(conn, buf, &addrto, 2020);

    接收过程的netbuf在哪儿分配的:

    udp.c中的udp_input中最后会调用

    pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);

    pcb的recv的是新建netconn时,pcb_new时挂接的,

    挂接的是api_msg.c中的recv_udp函数,在这里完成mbox post

    在该函数里分配netbuf,

    会往netconn的接收邮箱中发送消息(对于netconn而言,只有接收邮箱,没有发送邮箱,发送是不需要邮箱的

    sys_mbox_trypost(&conn->recvmbox, buf)

    在以下函数中完成

    api_lib.c中的netconn_recv,对于udp最后会调用netconn_recv_data

    最后会调用sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout),接收邮箱

  • 相关阅读:
    想要快速上手 Spring Boot?看这些教程就足够了!| 码云周刊第 81 期
    Eclipse Java注释模板设置详解以及版权声明
    java跨域解决
    微信公众号创建
    Java与JS生成二维码与条形码
    Java基础break、continue语句的用法
    分布式文件系统介绍
    Hadoop的RPC机制及简单实现
    RPC简介与hdfs读过程与写过程简介
    JVM的Client模式与Server模式
  • 原文地址:https://www.cnblogs.com/yanhc/p/8158257.html
Copyright © 2011-2022 走看看