简介
lwIP提供了两套API:
1.底层的基于回调(callback)的raw API
2.高层的顺序模型的API(类似BSD socket)
顺序模型的API为普通的顺序程序提供使用协议栈的API,和BSD风格的API很相似,也是基于阻塞的open-read-write-close模式。鉴于TCP/IP协议栈本身就基于时间的。所以TCP/IP代码和应用程序的代码必须在不同的线程中。
而raw API可以让应用程序和TCP/IP协议栈代码结合的更紧密。程序的执行也是基于事件的,使用回调函数的机制。这种方式TCP/IP代码和应用代码运行在同一个线程中。
实际上,顺序模型的API也是基于raw API实现的。
回调
程序的执行是基于回调函数的,回调函数从传入的参数获取当前连接的状态。为回调函数设置连接状态参数的函数如下:
void tcp_arg(struct tcp_pcb *pcb, void *arg) ;
pcb是当前TCP连接的控制块,arg是将会传给回调函数的参数。
建立TCP连接
TCP连接建立的方法和BSD socket很相似,通过tcp_new函数可以创建一个新的TCP标识(在raw API中是PCB这个结构--protocol control block)。PCB可以设置成监听一个连接或者明确地连接到一个主机。
struct tcp_pcb *tcp_new(void);