RAW/Callback API
是指内核回调型的 API,这在许多通信协议的 C 语言实现中都有所应用。
你新建了一个 TCP 或者 UDP 的连接,你想等它接收到数据以后去处理它们,这时你需要把处理该数据的操作封装成一个函数,然后将这个函数的指针注册到LwIP 内核中。
LwIP 内核会在需要的时候去检测该连接是否收到数据,如果收到了数据,内核会在第一时间调用注册的函数,这个过程被称为“回调”,这个注册函数被称为“回调函数”。
NETCONN API
SOCKET API
struct netbuf
{
truct pbuf *p, *ptr;
ip_addr_t addr;
u16_t port;
}
p和ptr | 看出netbuf真正保存数据的地方是指针p指向的pbuf链表 ,ptr也指向该pbuf链表, p和ptr不同的是:p一直指向链表的第一个pbuf,而ptr则不同,ptr可以指向链表中的其他位置。 |
---|---|
addr和port | 这两个字段分别记录数据发送方的IP地址和端口号。 |
netbuf_new()
netbuf_delete()
netbuf_alloc()
netbuf_free()
netbuf_ref()
netbuf_chain()
netbuf_data()
netbuf_next()
netbuf_first()
在使用NETCONN接口的时候不管你是UDP还是TCP统一使用一个连接结构—netconn,这样应用程序就可以忽略掉连接类型的差异,使用统一的连接结构和编程函数,在api.h中定义了netconn结构体。
struct netonn
{
enum netconn_type type;
enum netconn_state state;
union{
struct ip_pcb *ip;
struct tcp_pcb *tcp;
struct udp_pcb *udp;
struct raw_pcb *raw;
} pcb;
err_t last_err;
sys_sem_t op_completed;
…….
}
netconn_new() 此函数为一个宏
netconn_delete()
netconn_getaddr()
netconn_bind()
netconn_connect()
netconn_disconnect()
netconn_listen() 此函数为一个宏
netconn_accept()
netconn_recv()
netconn_send()
netconn_write() 此函数为一个宏
netconn_close()