【lwip】02_三种编程接口


前言

李柱明博客:https://www.cnblogs.com/lizhuming/p/15487055.html

2. 三种编程接口

  • RAW/Callback API

  • NETCONN API

  • SOCKET API

2.1 RAW/Callback API

内核回调型的 API。

这种 API 可以在裸机和 OS 上使用。

而裸机只能使用这种 API。

优点:

  • 可以在没有操作系统的环境中使用。
  • 在有操作系统的环境中使用它,对比另外两种 API,可以提高应用程序的效率、节省内存开销。

缺点:

  • 基于回调函数开发应用程序时的思维过程比较复杂。
  • 在操作系统环境中,应用程序代码与内核代码处于同一个线程。如果应用程序占用的时间过长,而且碰巧这时又有大量的数据包到达,由于内核代码长期得不到执行,网卡接收缓存里的数据包就持续积累,到最后很可能因为满载而丢弃一些数据包,从而造成丢包的现象。

2.2 NETCONN API

NETCONN API 是基于操作系统的 IPC 机制(即信号量和邮箱机制)实现的。

内核代码和网络应用程序分离成了独立的线程:

  • 内核代码线程:tcpip_thread
  • 网络应用程序线程:按各种网络模块区分。
  • 优先级参考:
线程 优先级
LwIP 内核线程 tcpip_thread 很高
重要的网络应用程序
不太重要&处理数据比较耗时的网络应用程序

优缺点:

  • 相对 RAW/Callback API

    • 用户可以按照操作文件的方式来操作网络连接。
    • 依赖与信号量和邮箱,消耗更多时间和内存,效率降低。
  • 相对 Socket API

    • 避免了内核程序和网络应用程序之间的数据拷贝,提高数据递交效率。
    • Socket API 的易用性较好,NETCONN API 需要了解内核结构体。

2.3 SOCKET API

套接字接口。

Socket API 具有更好的易用性&移植性。

LwIP 的 Socket API 是基于 NETCONN API 实现的。

参考

原文地址:https://www.cnblogs.com/lizhuming/p/15487055.html