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),接收邮箱

  • 相关阅读:
    WP7备注(13)(独立储存)
    WP7备注(14)(ContentPropertyAttribute)
    WP7备注(11)(页面跳转)
    WP7备注(10)(Accelerometer+GeoCoordinateWatcher+Map Service)
    WP7备注(12)(页面数据共享)
    WP7备注(18)(OpacityMask)
    WP7备注(15)(Resources)
    WP7备注(19)(ImageBrush|VideoBrush)
    WP7备注(17)(TextBlock和Inlines)
    vmware 复制其他电脑的linux无法上网问题
  • 原文地址:https://www.cnblogs.com/yanhc/p/8158257.html
Copyright © 2011-2022 走看看