• LwIP


    1、使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式。

    recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp!

    2、协议栈API(sequential API)是基于raw/callback API实现的,它与内核交换的方式也只能通过回调。

    netconn_new, netconn_delete, netconn_getaddr, netconn_connect, netconn_disconnect, netconn_listen, netconn_accept,

    netconn_recv, netconn_send, netconn_write, netconn_close

    注: netconn_send 是给UDP使用的。

    netconn_write是给TCP使用的。但是tcp发送时,有三种选择:

    (1)NETCONN_COPY 标志告诉协议栈将待发送数据拷贝到内核进程所属的内存空间,在这种情况下,会消耗系统的部分时间和内存资源,但是用户进程

    可以在向内核提交数据后立即重新使用这些数据区域,甚至删除这些区域,而不必等待内核是否完全正确发送。如果用户没有设置该位,则内核构造发送

    数据包是,会引用这些发送数据的内存区域,在这种情况下,用户进程不能再对这些数据进行修改,这种方式通常用在静态数据(ROM数据)的发送中。

    对于非ROM数据的发送,用户应尽量设置NETCONN_COPY标志。

    (2)NETCONN_MORE标志,当其置位时,组装这些数据的最后一个TCP报文段首部PSH标志将被设置,这样,数据在接收端将被尽快的递交给上层,而不会缓冲等待。

    3、BSD API(或者说 SOCKET API),是Lwip设计者对sequential API函数进行了简单封装后的函数。

    socket、bind、connect、listen、accept、sendto、write、recvfrom、read、close。

    sendto、recvfrom:主要用于UDP,但是也可用于TCP。

    write、read:主要用于TCP,但是也可用于UDP。

  • 相关阅读:
    Redission分布式锁原理
    【idea】idea自动为类生成文档注释
    【idea】idea自动导包设置
    【idea】idea编译环境改为1.8
    邮件html内容中带内网图片地址发送
    JVM8自适应导致内存居高不下
    分布式自增ID算法snowflake(JAVA版)
    制作 leanote docker 镜像
    Git学习之路(5)- 同步到远程仓库及多人协作问题
    Git学习之路(4)- 撤销操作、删除文件和恢复文件
  • 原文地址:https://www.cnblogs.com/god-of-death/p/7152525.html
Copyright © 2020-2023  润新知