|
首先介绍几个接口:
uip_init完成协议栈的初始化: 主要是:主要初始化协议栈的侦听端口(监听的uip_listenports)和默认所有连接是关闭的,uip_conns 就是tcp socket的初始化;
uip_input和uip_per iodic在协议的内部采用(即调用)同一个函数void uip_process(u8_t flag)实现,区别在于调用的参数不同;
uip_input的入参是:UIP_DATA //#define uip_input() uip_process(UIP_DATA)
uip_periodic的入参是:UIP_TIMER //#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \
uip_process(UIP_TIMER); } while (0)
#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \
uip_process(UIP_TIMER); } while (0)
uip_buf:定义如下u8_t uip_buf[UIP_BUFSIZE + 2];所有的数据处理都是通过处理它来完成的。比如接受的数据存储在这里,要发送的数据有会放在这里。
uip_len:uip_buf有用数据的字节
uip_appdata:uip_buf第一个可用字节的指针
uip_conn:总是指向当前连接的指针,定义:struct uip_conn *uip_conn; 下面是TCP连接的结构,用来区别不同的TCP连接,uip_tcp_appstate_t appstate是可以读
示例:建立一个udp socket:
dhcpc_init(const void *mac_addr, int mac_len)
{
uip_ipaddr_t addr;
s.mac_addr = mac_addr;
s.mac_len = mac_len;
s.state = STATE_INITIAL;
uip_ipaddr(addr, 255,255,255,255);
s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT));
if(s.conn != NULL) {
uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
}
PT_INIT(&s.pt);
}
DHCP是基于udp之上,端口是:67
|
|