uip中關於web服務器的簡單例子

這是官方文檔中的例子代碼,以此瞭解一下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

相關文章
相關標籤/搜索