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()
