lwip编程接口

lwip编程有三种接口 :

LwIP - raw/callback API :

  内核回调接口,这个比较高效,在不同类型连接(UDP和TCP)使用不相关的编程函数(udp_xxx 和 tcp_xxx),用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式。函数比如有:

tcp_recved、tcp_recv、tcp_sent、tcp_err、tcp_accept、tcp_poll、tcp_arg
udp_sent、udp_sendto、udp_sendto_if、udp_input

在这里插入图片描述
在这里插入图片描述

缺陷:基于回调函数方式编程特点。从编程模式可以看出,用户应用程序与协议栈内核处于同一进程中,用户程序通过回调方式执行,这样的话,应用程序和协议栈讲就存在相互制约关系,用户程序执行的时候,内核一直等待状态,内核需要等待用户函数返回一个结果再继续执行。如果用户程序计算量很大,执行时间很长,则协议栈就得不到执行,协议栈的接收和发送新的数据包会受到影响。也可能出现丢包情况。

协议栈API(sequential API):

  也称netconn编程,推荐使用这个进行lwip用户编程,函数有

netconn_new, netconn_delete, netconn_getaddr, netconn_connect, netconn_disconnect, netconn_listen, netconn_accept,netconn_recv, netconn_send, netconn_write, netconn_close

优点:解决raw/callback API编程缺陷,协议栈进程收到一个数据包之后,可以将数据包以邮箱的方式传递给用户进程,协议栈进程可以不被阻塞,继续接收处理下一个数据包。

BSD API(或者说 SOCKET API):

  socket编程,不管不同类型连接(UDP和TCP),都给用户一个统一的编程接口,这个还不太完善,基于协议栈API简单封装实现,函数有

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

在sockets.h里面定义
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u014783785/article/details/106011694
今日推荐