这是官方文档中的例子代码,以此了解一下uip处理web server是怎么样的。
struct example5_state{ char *dataptr; unsigned int dataleft;}void example5_init(void){ uip_listen(HTONS(80)); uip_listen(HTONS(81));}void example5_app(void){ struct example5_state *s; s = (struct example5_state)uip_conn->appstate; if(uip_connected()) { switch(uip_conn->lport) { case HTONS(80): s->dataptr = data_port_80; s->dataleft = datalen_port_80; break; case HTONS(81): s->dataptr = data_port_81; s->dataleft = datalen_port_81; break; } uip_send(s->dataptr, s->dataleft); return; } if(uip_acked()) { if(s->dateleft < uip_mss()) { uip_close(); return; } s->dataptr += uip_conn->len; s->dataleft -= uip_conn->len; uip_send(s->dataptr, s->dataleft); }结构体中含有要发送文件的地址和长度。初始化函数中分别监听80和81端口。app函数中根据端口值处理不同连接。这个app通过回应驱动即uip_asked(),如果发送文件长度小于uip_mss()中返回的长度,则表示文件发送完了,执行uip_close()。没有的话,调整文件指针和长度信息,继续通过uip_send()发送。