這是官方文檔中的例子代碼,以此瞭解一下uip處理web server是怎麼樣的。web
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()發送。app